aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/parser/ast
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2016-06-20 20:55:22 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2016-07-26 19:47:02 +0300
commitd745f000d6d60b9cdf0ba40dbf80660c1aa6bc61 (patch)
treee00ea32ae3a2d291768084544cb21429281dc0ae /main/core/parser/ast
parentd35a37a449d31e6f4b43b937abf7b0e1fc497828 (diff)
Implemented general enhancements
Diffstat (limited to 'main/core/parser/ast')
-rw-r--r--main/core/parser/ast/ASTNode.java4
-rw-r--r--main/core/parser/ast/AdditionNode.java9
-rw-r--r--main/core/parser/ast/BinaryOperatorNode.java17
-rw-r--r--main/core/parser/ast/EmptyNode.java27
-rw-r--r--main/core/parser/ast/FunctionBodyNode.java25
-rw-r--r--main/core/parser/ast/FunctionDefineNode.java59
-rw-r--r--main/core/parser/ast/ParameterListNode.java38
-rw-r--r--main/core/parser/ast/SubtractionNode.java30
-rw-r--r--main/core/parser/ast/SymbolNode.java48
-rw-r--r--main/core/parser/ast/VarargOperatorNode.java26
10 files changed, 275 insertions, 8 deletions
diff --git a/main/core/parser/ast/ASTNode.java b/main/core/parser/ast/ASTNode.java
index 4f840e3..99bdc06 100644
--- a/main/core/parser/ast/ASTNode.java
+++ b/main/core/parser/ast/ASTNode.java
@@ -31,7 +31,9 @@ abstract public class ASTNode {
System.out.println(source.toString());
for (ASTNode node : getChildren()) {
- node.print(indent + 1);
+ if (node != null) {
+ node.print(indent + 1);
+ }
}
}
}
diff --git a/main/core/parser/ast/AdditionNode.java b/main/core/parser/ast/AdditionNode.java
index 46f67a4..a6406ae 100644
--- a/main/core/parser/ast/AdditionNode.java
+++ b/main/core/parser/ast/AdditionNode.java
@@ -9,15 +9,10 @@ import java.util.List;
/**
* Created by jan on 16.6.2016.
*/
-public class AdditionNode extends ASTNode {
-
- private ASTNode lhs;
- private ASTNode rhs;
+public class AdditionNode extends BinaryOperatorNode {
public AdditionNode(Token token, ASTNode lhs, ASTNode rhs) {
- super(token);
- this.lhs = lhs;
- this.rhs = rhs;
+ super(token, lhs, rhs);
}
@Override
diff --git a/main/core/parser/ast/BinaryOperatorNode.java b/main/core/parser/ast/BinaryOperatorNode.java
new file mode 100644
index 0000000..9ec21a4
--- /dev/null
+++ b/main/core/parser/ast/BinaryOperatorNode.java
@@ -0,0 +1,17 @@
+package com.jantuomi.interpreter.main.core.parser.ast;
+
+import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+
+/**
+ * Created by jan on 16.6.2016.
+ */
+abstract public class BinaryOperatorNode extends ASTNode {
+ protected ASTNode lhs;
+ protected ASTNode rhs;
+
+ public BinaryOperatorNode(Token token, ASTNode lhs, ASTNode rhs) {
+ super(token);
+ this.lhs = lhs;
+ this.rhs = rhs;
+ }
+}
diff --git a/main/core/parser/ast/EmptyNode.java b/main/core/parser/ast/EmptyNode.java
new file mode 100644
index 0000000..44bfcc9
--- /dev/null
+++ b/main/core/parser/ast/EmptyNode.java
@@ -0,0 +1,27 @@
+package com.jantuomi.interpreter.main.core.parser.ast;
+
+import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
+import com.jantuomi.interpreter.main.core.parser.datatype.VoidDataContainer;
+import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by jan on 17.6.2016.
+ */
+public class EmptyNode extends ASTNode {
+ public EmptyNode(Token source) {
+ super(source);
+ }
+
+ @Override
+ public DataContainer evaluate() {
+ return new VoidDataContainer();
+ }
+
+ @Override
+ List<ASTNode> getChildren() {
+ return Arrays.asList();
+ }
+}
diff --git a/main/core/parser/ast/FunctionBodyNode.java b/main/core/parser/ast/FunctionBodyNode.java
new file mode 100644
index 0000000..394710c
--- /dev/null
+++ b/main/core/parser/ast/FunctionBodyNode.java
@@ -0,0 +1,25 @@
+package com.jantuomi.interpreter.main.core.parser.ast;
+
+import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
+import com.jantuomi.interpreter.main.core.parser.datatype.VoidDataContainer;
+import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+
+/**
+ * Created by jan on 17.6.2016.
+ */
+public class FunctionBodyNode extends VarargOperatorNode {
+ public FunctionBodyNode(Token token) {
+ super(token);
+ }
+
+ @Override
+ public DataContainer evaluate() {
+ DataContainer returnValue = new VoidDataContainer();
+
+ for (ASTNode node : args) {
+ returnValue = node.evaluate();
+ }
+
+ return returnValue;
+ }
+}
diff --git a/main/core/parser/ast/FunctionDefineNode.java b/main/core/parser/ast/FunctionDefineNode.java
new file mode 100644
index 0000000..e867f78
--- /dev/null
+++ b/main/core/parser/ast/FunctionDefineNode.java
@@ -0,0 +1,59 @@
+package com.jantuomi.interpreter.main.core.parser.ast;
+
+import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
+import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+
+/**
+ * Created by jan on 17.6.2016.
+ */
+public class FunctionDefineNode extends VarargOperatorNode {
+
+ private String name;
+
+ public void setBody(ASTNode body) {
+ this.body = body;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ private ASTNode body;
+
+ public FunctionDefineNode(Token token) {
+ super(token);
+ }
+
+ @Override
+ public DataContainer evaluate() {
+ // TODO add function in State
+ return null;
+ }
+
+ @Override
+ public void print(int indent) {
+
+ for (int i = 0; i < indent; i++) {
+ System.out.print("\t");
+ }
+
+ System.out.println(String.format("Function %s", name));
+
+ for (int i = 0; i < indent + 1; i++) {
+ System.out.print("\t");
+ }
+
+ System.out.println(String.format("Arguments: "));
+
+ for (ASTNode node : args) {
+ node.print(indent + 2);
+ }
+
+ for (int i = 0; i < indent + 1; i++) {
+ System.out.print("\t");
+ }
+
+ System.out.println(String.format("Body statements: "));
+ body.print(indent + 2);
+ }
+}
diff --git a/main/core/parser/ast/ParameterListNode.java b/main/core/parser/ast/ParameterListNode.java
new file mode 100644
index 0000000..50f919a
--- /dev/null
+++ b/main/core/parser/ast/ParameterListNode.java
@@ -0,0 +1,38 @@
+package com.jantuomi.interpreter.main.core.parser.ast;
+
+import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
+import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by jan on 19.6.2016.
+ */
+public class ParameterListNode extends ASTNode {
+
+ private List<ASTNode> parameters = new ArrayList<>();
+
+ public void addParameter(ASTNode param) {
+ parameters.add(param);
+ }
+
+ public List<ASTNode> getParameters() {
+ return parameters;
+ }
+
+ public ParameterListNode(Token token) {
+ super(token);
+ }
+
+ @Override
+ public DataContainer evaluate() {
+ // TODO use State to evaluate function
+ return null;
+ }
+
+ @Override
+ List<ASTNode> getChildren() {
+ return parameters;
+ }
+}
diff --git a/main/core/parser/ast/SubtractionNode.java b/main/core/parser/ast/SubtractionNode.java
new file mode 100644
index 0000000..0865ab1
--- /dev/null
+++ b/main/core/parser/ast/SubtractionNode.java
@@ -0,0 +1,30 @@
+package com.jantuomi.interpreter.main.core.parser.ast;
+
+import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
+import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by jan on 16.6.2016.
+ */
+public class SubtractionNode extends BinaryOperatorNode {
+ public SubtractionNode(Token token, ASTNode lhs, ASTNode rhs) {
+ super(token, lhs, rhs);
+ }
+
+ @Override
+ public DataContainer evaluate() {
+ DataContainer operand1 = lhs.evaluate();
+ DataContainer operand2 = rhs.evaluate();
+
+ DataContainer result = operand1.subtract(operand2);
+ return result;
+
+ }
+ @Override
+ List<ASTNode> getChildren() {
+ return Arrays.asList(lhs, rhs);
+ }
+}
diff --git a/main/core/parser/ast/SymbolNode.java b/main/core/parser/ast/SymbolNode.java
new file mode 100644
index 0000000..7ea8d96
--- /dev/null
+++ b/main/core/parser/ast/SymbolNode.java
@@ -0,0 +1,48 @@
+package com.jantuomi.interpreter.main.core.parser.ast;
+
+import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
+import com.jantuomi.interpreter.main.core.runtime.State;
+import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by jan on 17.6.2016.
+ */
+public class SymbolNode extends ASTNode {
+
+ public ParameterListNode getParameterListNode() {
+ return parameterListNode;
+ }
+
+ public void setParameterListNode(ParameterListNode parameterListNode) {
+ this.parameterListNode = parameterListNode;
+ }
+
+ private ParameterListNode parameterListNode;
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ private String name;
+
+ public SymbolNode(Token token) {
+ super(token);
+ }
+
+ @Override
+ public DataContainer evaluate() {
+ return State.getInstance().getSymbolValue(name, parameterListNode.getParameters());
+ }
+
+ @Override
+ List<ASTNode> getChildren() {
+ if (parameterListNode == null) {
+ return Arrays.asList();
+ } else {
+ return Arrays.asList(parameterListNode);
+ }
+ }
+}
diff --git a/main/core/parser/ast/VarargOperatorNode.java b/main/core/parser/ast/VarargOperatorNode.java
new file mode 100644
index 0000000..96a7320
--- /dev/null
+++ b/main/core/parser/ast/VarargOperatorNode.java
@@ -0,0 +1,26 @@
+package com.jantuomi.interpreter.main.core.parser.ast;
+
+import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+
+import java.util.List;
+
+/**
+ * Created by jan on 17.6.2016.
+ */
+public abstract class VarargOperatorNode extends ASTNode {
+
+ protected List<ASTNode> args;
+
+ public VarargOperatorNode(Token token) {
+ super(token);
+ }
+
+ @Override
+ public List<ASTNode> getChildren() {
+ return args;
+ }
+
+ public void setArgs(List<ASTNode> args) {
+ this.args = args;
+ }
+}