aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/parser/ast
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2016-06-16 20:21:25 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2016-07-26 19:47:02 +0300
commitd35a37a449d31e6f4b43b937abf7b0e1fc497828 (patch)
tree8d65ac1068dbf09de480e7cae0fb39ec21d330ec /main/core/parser/ast
parentf441022881945db08846e09a8f3bfee2f8cfa95d (diff)
Grammar now uses reverse polish notation
Diffstat (limited to 'main/core/parser/ast')
-rw-r--r--main/core/parser/ast/ASTNode.java4
-rw-r--r--main/core/parser/ast/AdditionNode.java30
-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.java17
-rw-r--r--main/core/parser/ast/SymbolNode.java35
6 files changed, 27 insertions, 107 deletions
diff --git a/main/core/parser/ast/ASTNode.java b/main/core/parser/ast/ASTNode.java
index 106ff75..4f840e3 100644
--- a/main/core/parser/ast/ASTNode.java
+++ b/main/core/parser/ast/ASTNode.java
@@ -18,6 +18,10 @@ abstract public class ASTNode {
this.source = token;
}
+ public Token.Type tokenType() {
+ return source.getTokenType();
+ }
+
abstract List<ASTNode> getChildren();
public void print(int indent) {
diff --git a/main/core/parser/ast/AdditionNode.java b/main/core/parser/ast/AdditionNode.java
index f6ebc84..46f67a4 100644
--- a/main/core/parser/ast/AdditionNode.java
+++ b/main/core/parser/ast/AdditionNode.java
@@ -6,31 +6,31 @@ import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
import java.util.Arrays;
import java.util.List;
-
/**
- * Created by jan on 13.6.2016.
+ * Created by jan on 16.6.2016.
*/
-public class AdditionNode extends ExpressionNode {
-
- private ExpressionNode lhs;
- private ExpressionNode rhs;
+public class AdditionNode extends ASTNode {
- public AdditionNode(ExpressionNode lhs, ExpressionNode rhs) {
- super(new Token(Token.Type.AdditionToken));
+ private ASTNode lhs;
+ private ASTNode rhs;
+ public AdditionNode(Token token, ASTNode lhs, ASTNode rhs) {
+ super(token);
this.lhs = lhs;
this.rhs = rhs;
}
@Override
- public List<ASTNode> getChildren() {
- return Arrays.asList(lhs, rhs);
- }
+ public DataContainer evaluate() {
+ DataContainer operand1 = lhs.evaluate();
+ DataContainer operand2 = rhs.evaluate();
+ DataContainer result = operand1.add(operand2);
+ return result;
+
+ }
@Override
- public DataContainer evaluate() {
- DataContainer lhs = this.lhs.evaluate();
- DataContainer rhs = this.rhs.evaluate();
- return lhs.add(rhs);
+ List<ASTNode> getChildren() {
+ return Arrays.asList(lhs, rhs);
}
}
diff --git a/main/core/parser/ast/AssignmentNode.java b/main/core/parser/ast/AssignmentNode.java
deleted file mode 100644
index 8d8f8bc..0000000
--- a/main/core/parser/ast/AssignmentNode.java
+++ /dev/null
@@ -1,36 +0,0 @@
-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
deleted file mode 100644
index ac1a190..0000000
--- a/main/core/parser/ast/ExpressionNode.java
+++ /dev/null
@@ -1,12 +0,0 @@
-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
index d2fceb1..68b57d7 100644
--- a/main/core/parser/ast/IntegerLiteralNode.java
+++ b/main/core/parser/ast/IntegerLiteralNode.java
@@ -8,24 +8,23 @@ import java.util.Arrays;
import java.util.List;
/**
- * Created by jan on 13.6.2016.
+ * Created by jan on 16.6.2016.
*/
-public class IntegerLiteralNode extends ExpressionNode {
-
- private int data;
+public class IntegerLiteralNode extends ASTNode {
+ private IntegerDataContainer value;
public IntegerLiteralNode(Token token) {
super(token);
- this.data = Integer.parseInt(token.getText());
+ value = new IntegerDataContainer(Integer.parseInt(token.getText()));
}
@Override
- List<ASTNode> getChildren() {
- return Arrays.asList();
+ public DataContainer evaluate() {
+ return value;
}
@Override
- public DataContainer evaluate() {
- return new IntegerDataContainer(data);
+ List<ASTNode> getChildren() {
+ return Arrays.asList();
}
}
diff --git a/main/core/parser/ast/SymbolNode.java b/main/core/parser/ast/SymbolNode.java
deleted file mode 100644
index 1457851..0000000
--- a/main/core/parser/ast/SymbolNode.java
+++ /dev/null
@@ -1,35 +0,0 @@
-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);
- }
-}