diff options
Diffstat (limited to 'main/core/parser/ast')
| -rw-r--r-- | main/core/parser/ast/ASTNode.java | 3 | ||||
| -rw-r--r-- | main/core/parser/ast/AdditionNode.java | 3 | ||||
| -rw-r--r-- | main/core/parser/ast/AssignmentNode.java | 3 | ||||
| -rw-r--r-- | main/core/parser/ast/BlockBodyNode.java (renamed from main/core/parser/ast/FunctionBodyNode.java) | 7 | ||||
| -rw-r--r-- | main/core/parser/ast/BranchNode.java | 42 | ||||
| -rw-r--r-- | main/core/parser/ast/FunctionDefineNode.java | 2 | ||||
| -rw-r--r-- | main/core/parser/ast/SubtractionNode.java | 3 | ||||
| -rw-r--r-- | main/core/parser/ast/SymbolNode.java | 3 |
8 files changed, 57 insertions, 9 deletions
diff --git a/main/core/parser/ast/ASTNode.java b/main/core/parser/ast/ASTNode.java index 99bdc06..311314f 100644 --- a/main/core/parser/ast/ASTNode.java +++ b/main/core/parser/ast/ASTNode.java @@ -2,6 +2,7 @@ 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 com.jantuomi.interpreter.main.exception.InterpreterException; import java.util.List; @@ -10,7 +11,7 @@ import java.util.List; */ abstract public class ASTNode { - public abstract DataContainer evaluate(); + public abstract DataContainer evaluate() throws InterpreterException; protected Token source; diff --git a/main/core/parser/ast/AdditionNode.java b/main/core/parser/ast/AdditionNode.java index a6406ae..0820370 100644 --- a/main/core/parser/ast/AdditionNode.java +++ b/main/core/parser/ast/AdditionNode.java @@ -2,6 +2,7 @@ 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 com.jantuomi.interpreter.main.exception.InterpreterException; import java.util.Arrays; import java.util.List; @@ -16,7 +17,7 @@ public class AdditionNode extends BinaryOperatorNode { } @Override - public DataContainer evaluate() { + public DataContainer evaluate() throws InterpreterException { DataContainer operand1 = lhs.evaluate(); DataContainer operand2 = rhs.evaluate(); diff --git a/main/core/parser/ast/AssignmentNode.java b/main/core/parser/ast/AssignmentNode.java index bcbff1c..f2e7b8d 100644 --- a/main/core/parser/ast/AssignmentNode.java +++ b/main/core/parser/ast/AssignmentNode.java @@ -3,6 +3,7 @@ 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 com.jantuomi.interpreter.main.exception.InterpreterException; import java.util.Arrays; import java.util.List; @@ -16,7 +17,7 @@ public class AssignmentNode extends BinaryOperatorNode { } @Override - public DataContainer evaluate() { + public DataContainer evaluate() throws InterpreterException { SymbolNode symbol = (SymbolNode) lhs; DataContainer rValue = rhs.evaluate(); State.getInstance().setSymbolValueToScope( diff --git a/main/core/parser/ast/FunctionBodyNode.java b/main/core/parser/ast/BlockBodyNode.java index 394710c..671f847 100644 --- a/main/core/parser/ast/FunctionBodyNode.java +++ b/main/core/parser/ast/BlockBodyNode.java @@ -3,17 +3,18 @@ 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 com.jantuomi.interpreter.main.exception.InterpreterException; /** * Created by jan on 17.6.2016. */ -public class FunctionBodyNode extends VarargOperatorNode { - public FunctionBodyNode(Token token) { +public class BlockBodyNode extends VarargOperatorNode { + public BlockBodyNode(Token token) { super(token); } @Override - public DataContainer evaluate() { + public DataContainer evaluate() throws InterpreterException { DataContainer returnValue = new VoidDataContainer(); for (ASTNode node : args) { diff --git a/main/core/parser/ast/BranchNode.java b/main/core/parser/ast/BranchNode.java new file mode 100644 index 0000000..d6fb4cf --- /dev/null +++ b/main/core/parser/ast/BranchNode.java @@ -0,0 +1,42 @@ +package com.jantuomi.interpreter.main.core.parser.ast; + +import com.jantuomi.interpreter.main.core.parser.datatype.BooleanDataContainer; +import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer; +import com.jantuomi.interpreter.main.core.tokenizer.token.Token; +import com.jantuomi.interpreter.main.exception.InterpreterException; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 17.6.2016. + */ +public class BranchNode extends ASTNode { + + private ASTNode expression; + private BlockBodyNode branch; + + public BranchNode(Token token, ASTNode expression, BlockBodyNode branch) { + super(token); + this.expression = expression; + this.branch = branch; + } + + @Override + public DataContainer evaluate() throws InterpreterException { + DataContainer ev = expression.evaluate(); + boolean returnValue = false; + if (ev instanceof BooleanDataContainer) { + returnValue = ((BooleanDataContainer) ev).getData(); + if (returnValue) { + branch.evaluate(); + } + } + return new BooleanDataContainer(returnValue); + } + + @Override + List<ASTNode> getChildren() { + return Arrays.asList(expression, branch); + } +} diff --git a/main/core/parser/ast/FunctionDefineNode.java b/main/core/parser/ast/FunctionDefineNode.java index 2402bed..482551f 100644 --- a/main/core/parser/ast/FunctionDefineNode.java +++ b/main/core/parser/ast/FunctionDefineNode.java @@ -37,7 +37,7 @@ public class FunctionDefineNode extends VarargOperatorNode { SymbolNode argSym = (SymbolNode) arg; argumentNames.add(argSym.getName()); } - Function function = new Function(argumentNames, (FunctionBodyNode) body); + Function function = new Function(argumentNames, (BlockBodyNode) body); State.getInstance().addFunctionToScope(name, function); return new StringDataContainer("function " + name); diff --git a/main/core/parser/ast/SubtractionNode.java b/main/core/parser/ast/SubtractionNode.java index 0865ab1..b234d0d 100644 --- a/main/core/parser/ast/SubtractionNode.java +++ b/main/core/parser/ast/SubtractionNode.java @@ -2,6 +2,7 @@ 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 com.jantuomi.interpreter.main.exception.InterpreterException; import java.util.Arrays; import java.util.List; @@ -15,7 +16,7 @@ public class SubtractionNode extends BinaryOperatorNode { } @Override - public DataContainer evaluate() { + public DataContainer evaluate() throws InterpreterException { DataContainer operand1 = lhs.evaluate(); DataContainer operand2 = rhs.evaluate(); diff --git a/main/core/parser/ast/SymbolNode.java b/main/core/parser/ast/SymbolNode.java index 4dfb403..c44d41b 100644 --- a/main/core/parser/ast/SymbolNode.java +++ b/main/core/parser/ast/SymbolNode.java @@ -3,6 +3,7 @@ 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 com.jantuomi.interpreter.main.exception.InterpreterException; import java.util.ArrayList; import java.util.Arrays; @@ -38,7 +39,7 @@ public class SymbolNode extends ASTNode { } @Override - public DataContainer evaluate() { + public DataContainer evaluate() throws InterpreterException { List<DataContainer> paramValues = new ArrayList<>(); if (parameterListNode != null) { for (ASTNode param : parameterListNode.getChildren()) { |
