From eff296cc2c354f311dfe7696184f0313a6f04713 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Tue, 21 Jun 2016 20:57:56 +0300 Subject: Add if branch token and node --- main/core/parser/ast/ASTNode.java | 3 +- main/core/parser/ast/AdditionNode.java | 3 +- main/core/parser/ast/AssignmentNode.java | 3 +- main/core/parser/ast/BlockBodyNode.java | 26 +++++++++++++++++ main/core/parser/ast/BranchNode.java | 42 ++++++++++++++++++++++++++++ main/core/parser/ast/FunctionBodyNode.java | 25 ----------------- main/core/parser/ast/FunctionDefineNode.java | 2 +- main/core/parser/ast/SubtractionNode.java | 3 +- main/core/parser/ast/SymbolNode.java | 3 +- 9 files changed, 79 insertions(+), 31 deletions(-) create mode 100644 main/core/parser/ast/BlockBodyNode.java create mode 100644 main/core/parser/ast/BranchNode.java delete mode 100644 main/core/parser/ast/FunctionBodyNode.java (limited to 'main/core/parser/ast') 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/BlockBodyNode.java b/main/core/parser/ast/BlockBodyNode.java new file mode 100644 index 0000000..671f847 --- /dev/null +++ b/main/core/parser/ast/BlockBodyNode.java @@ -0,0 +1,26 @@ +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 BlockBodyNode extends VarargOperatorNode { + public BlockBodyNode(Token token) { + super(token); + } + + @Override + public DataContainer evaluate() throws InterpreterException { + DataContainer returnValue = new VoidDataContainer(); + + for (ASTNode node : args) { + returnValue = node.evaluate(); + } + + return returnValue; + } +} 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 getChildren() { + return Arrays.asList(expression, branch); + } +} diff --git a/main/core/parser/ast/FunctionBodyNode.java b/main/core/parser/ast/FunctionBodyNode.java deleted file mode 100644 index 394710c..0000000 --- a/main/core/parser/ast/FunctionBodyNode.java +++ /dev/null @@ -1,25 +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.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 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 paramValues = new ArrayList<>(); if (parameterListNode != null) { for (ASTNode param : parameterListNode.getChildren()) { -- cgit v1.3