aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/parser/ast
diff options
context:
space:
mode:
Diffstat (limited to 'main/core/parser/ast')
-rw-r--r--main/core/parser/ast/ASTNode.java33
-rw-r--r--main/core/parser/ast/AdditionNode.java34
-rw-r--r--main/core/parser/ast/AssignmentNode.java36
-rw-r--r--main/core/parser/ast/ExpressionNode.java12
-rw-r--r--main/core/parser/ast/IntegerLiteralNode.java30
-rw-r--r--main/core/parser/ast/SymbolNode.java35
6 files changed, 180 insertions, 0 deletions
diff --git a/main/core/parser/ast/ASTNode.java b/main/core/parser/ast/ASTNode.java
new file mode 100644
index 0000000..106ff75
--- /dev/null
+++ b/main/core/parser/ast/ASTNode.java
@@ -0,0 +1,33 @@
+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.List;
+
+/**
+ * Created by jan on 11.6.2016.
+ */
+abstract public class ASTNode {
+
+ public abstract DataContainer evaluate();
+
+ protected Token source;
+
+ public ASTNode(Token token) {
+ this.source = token;
+ }
+
+ abstract List<ASTNode> getChildren();
+
+ public void print(int indent) {
+ for (int i = 0; i < indent; i++) {
+ System.out.print("\t");
+ }
+
+ System.out.println(source.toString());
+ for (ASTNode node : getChildren()) {
+ node.print(indent + 1);
+ }
+ }
+}
diff --git a/main/core/parser/ast/AdditionNode.java b/main/core/parser/ast/AdditionNode.java
new file mode 100644
index 0000000..3117e41
--- /dev/null
+++ b/main/core/parser/ast/AdditionNode.java
@@ -0,0 +1,34 @@
+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 13.6.2016.
+ */
+public class AdditionNode extends ExpressionNode {
+
+ private ExpressionNode lhs;
+ private ExpressionNode rhs;
+
+ public AdditionNode(ExpressionNode lhs, ExpressionNode rhs) {
+ super(new Token(Token.Type.AdditionToken));
+
+ this.lhs = lhs;
+ this.rhs = rhs;
+ }
+
+ @Override
+ public List<ASTNode> getChildren() {
+ return Arrays.asList(lhs, rhs);
+ }
+
+ @Override
+ public DataContainer evaluate() {
+ return null;
+ }
+}
diff --git a/main/core/parser/ast/AssignmentNode.java b/main/core/parser/ast/AssignmentNode.java
new file mode 100644
index 0000000..8d8f8bc
--- /dev/null
+++ b/main/core/parser/ast/AssignmentNode.java
@@ -0,0 +1,36 @@
+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 11.6.2016.
+ */
+public class AssignmentNode extends ASTNode {
+
+ private SymbolNode lhs;
+ private ExpressionNode rhs;
+
+ public AssignmentNode(SymbolNode lhs, ExpressionNode rhs) {
+ super(new Token(Token.Type.AssignmentToken));
+
+ this.lhs = lhs;
+ this.rhs = rhs;
+ }
+
+ @Override
+ public DataContainer evaluate() {
+ DataContainer value = rhs.evaluate();
+ State.getInstance().setSymbolValue(lhs.getSymbol(), value);
+ return value;
+ }
+
+ @Override
+ List<ASTNode> getChildren() {
+ return Arrays.asList(lhs, rhs);
+ }
+}
diff --git a/main/core/parser/ast/ExpressionNode.java b/main/core/parser/ast/ExpressionNode.java
new file mode 100644
index 0000000..ac1a190
--- /dev/null
+++ b/main/core/parser/ast/ExpressionNode.java
@@ -0,0 +1,12 @@
+package com.jantuomi.interpreter.main.core.parser.ast;
+
+import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+
+/**
+ * Created by jan on 11.6.2016.
+ */
+abstract public class ExpressionNode extends ASTNode {
+ public ExpressionNode(Token token) {
+ super(token);
+ }
+}
diff --git a/main/core/parser/ast/IntegerLiteralNode.java b/main/core/parser/ast/IntegerLiteralNode.java
new file mode 100644
index 0000000..b68adf0
--- /dev/null
+++ b/main/core/parser/ast/IntegerLiteralNode.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 13.6.2016.
+ */
+public class IntegerLiteralNode extends ExpressionNode {
+
+ private int data;
+
+ public IntegerLiteralNode(Token token) {
+ super(token);
+ this.data = Integer.parseInt(token.getText());
+ }
+
+ @Override
+ List<ASTNode> getChildren() {
+ return Arrays.asList();
+ }
+
+ @Override
+ public DataContainer evaluate() {
+ return null;
+ }
+}
diff --git a/main/core/parser/ast/SymbolNode.java b/main/core/parser/ast/SymbolNode.java
new file mode 100644
index 0000000..1457851
--- /dev/null
+++ b/main/core/parser/ast/SymbolNode.java
@@ -0,0 +1,35 @@
+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 11.6.2016.
+ */
+public class SymbolNode extends ExpressionNode {
+ private String symbol;
+
+ public SymbolNode(Token token) {
+ super(token);
+
+ this.symbol = token.getText();
+ }
+
+ @Override
+ List<ASTNode> getChildren() {
+ return Arrays.asList();
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ @Override
+ public DataContainer evaluate() {
+ return State.getInstance().getSymbolValue(symbol);
+ }
+}