diff options
Diffstat (limited to 'main/core/parser')
29 files changed, 0 insertions, 1256 deletions
diff --git a/main/core/parser/ASTGenerator.java b/main/core/parser/ASTGenerator.java deleted file mode 100644 index 3d19a8c..0000000 --- a/main/core/parser/ASTGenerator.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.jantuomi.interpreter.main.core.parser; - -import com.jantuomi.interpreter.main.core.parser.ast.ASTNode; -import com.jantuomi.interpreter.main.core.tokenizer.token.Token; -import com.jantuomi.interpreter.main.exception.InterpreterException; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by jan on 16.6.2016. - */ -public class ASTGenerator { - private static final ASTGenerator instance = new ASTGenerator(); - - private ASTGenerator() {} - - public static ASTGenerator getInstance() { - return instance; - } - - public List<ASTNode> generate(List<Token> trees) throws InterpreterException { - List<ASTNode> list = new ArrayList<>(); - - for (Token root : trees) { - list.add(root.generateNode()); - } - - return list; - } - - public void printTree(ASTNode root) { - System.out.println("### AST Tree begin ###"); - root.print(0); - System.out.println("### AST Tree end ###"); - } - - public void printAllTrees(List<ASTNode> trees) { - for (ASTNode tree : trees) { - printTree(tree); - } - } -} diff --git a/main/core/parser/Parser.java b/main/core/parser/Parser.java deleted file mode 100644 index f6e1208..0000000 --- a/main/core/parser/Parser.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.jantuomi.interpreter.main.core.parser; - -import com.jantuomi.interpreter.main.core.parser.ast.ASTNode; -import com.jantuomi.interpreter.main.core.tokenizer.token.ArgumentInfo; -import com.jantuomi.interpreter.main.core.tokenizer.token.Token; -import com.jantuomi.interpreter.main.exception.ExceptionManager; -import com.jantuomi.interpreter.main.exception.InterpreterException; - -import java.util.ArrayList; -import java.util.List; -import java.util.Stack; - -/** - * Created by jan on 11.6.2016. - */ -public class Parser { - private static final Parser instance = new Parser(); - - private List<Token> tokens; - private List<ASTNode> statementSequence; - - public static Parser getInstance() { - return instance; - } - - private Parser() { - - } - - private Stack<Token> stack; - - public List<Token> parse(List<Token> tokens) throws InterpreterException { - this.tokens = tokens; - this.stack = new Stack<>(); - - List<Token> args; - List<Token> output = new ArrayList<>(); - for (Token t : tokens) { - if (t.getTokenType() == Token.Type.NewlineToken) { -// if (stack.size() > 0) { -// output.add(stack.pop()); -// } - continue; - } - - args = new ArrayList<>(); - ArgumentInfo argumentInfo = t.getArgumentInfo(); - - /* - This branch is executed if the token has a variable list of arguments - */ - if (argumentInfo.getVarargs()) { - while (true) { - if (stack.size() > 0) { - Token arg = stack.pop(); - if (arg.getTokenType() != argumentInfo.getTerminator()) { - args.add(arg); - } - else { - args.add(arg); - break; - } - } - } - } - /* - If the token has an optional argument type (it is only an argument if - it is of certain type) - */ - else if (argumentInfo.getOptionalArgument() != null) { - if (stack.size() > 0 && stack.peek().getTokenType() == argumentInfo.getOptionalArgument()) { - args.add(stack.pop()); - } - } - /* Normal cases with a fixed list of arguments */ - else { - for (int i = 0; i < argumentInfo.getCount(); i++) { - if (stack.size() > 0) { - args.add(stack.pop()); - } else { - ExceptionManager.raise(InterpreterException.ExceptionType.ArgumentError, t.getLine(), - t.toString(), Integer.toString(argumentInfo.getCount())); - return null; - } - } - } - - Token result = t.setArguments(args); - stack.push(result); - } - while (stack.size() > 0) { - output.add(stack.pop()); - } - return output; - } - - public void printTree(Token e) { - System.out.println("### Token Tree begin ###"); - e.print(0); - System.out.println("### Token Tree end ###"); - } - - public void printAllTrees(List<Token> trees) { - for (Token tree : trees) { - printTree(tree); - } - } -} diff --git a/main/core/parser/ast/ASTNode.java b/main/core/parser/ast/ASTNode.java deleted file mode 100644 index 311314f..0000000 --- a/main/core/parser/ast/ASTNode.java +++ /dev/null @@ -1,40 +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.tokenizer.token.Token; -import com.jantuomi.interpreter.main.exception.InterpreterException; - -import java.util.List; - -/** - * Created by jan on 11.6.2016. - */ -abstract public class ASTNode { - - public abstract DataContainer evaluate() throws InterpreterException; - - protected Token source; - - public ASTNode(Token token) { - this.source = token; - } - - public Token.Type tokenType() { - return source.getTokenType(); - } - - 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()) { - if (node != null) { - node.print(indent + 1); - } - } - } -} diff --git a/main/core/parser/ast/AdditionNode.java b/main/core/parser/ast/AdditionNode.java deleted file mode 100644 index 00db230..0000000 --- a/main/core/parser/ast/AdditionNode.java +++ /dev/null @@ -1,39 +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.tokenizer.token.Token; -import com.jantuomi.interpreter.main.exception.ExceptionManager; -import com.jantuomi.interpreter.main.exception.InterpreterException; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 16.6.2016. - */ -public class AdditionNode extends BinaryOperatorNode { - - public AdditionNode(Token token, ASTNode lhs, ASTNode rhs) { - super(token, lhs, rhs); - } - - @Override - public DataContainer evaluate() throws InterpreterException { - DataContainer operand1 = lhs.evaluate(); - DataContainer operand2 = rhs.evaluate(); - - DataContainer result = operand1.add(operand2); - if (result != null) { - return result; - } else { - ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, source.getLine(), - operand1.getType().toString(), operand2.getType().toString()); - return null; - } - - } - @Override - 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 f2e7b8d..0000000 --- a/main/core/parser/ast/AssignmentNode.java +++ /dev/null @@ -1,34 +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 com.jantuomi.interpreter.main.exception.InterpreterException; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 21.6.2016. - */ -public class AssignmentNode extends BinaryOperatorNode { - public AssignmentNode(Token token, SymbolNode lhs, ASTNode rhs) { - super(token, lhs, rhs); - } - - @Override - public DataContainer evaluate() throws InterpreterException { - SymbolNode symbol = (SymbolNode) lhs; - DataContainer rValue = rhs.evaluate(); - State.getInstance().setSymbolValueToScope( - symbol.getName(), - rValue - ); - return rValue; - } - - @Override - List<ASTNode> getChildren() { - return Arrays.asList(lhs, rhs); - } -} diff --git a/main/core/parser/ast/BinaryOperatorNode.java b/main/core/parser/ast/BinaryOperatorNode.java deleted file mode 100644 index 9ec21a4..0000000 --- a/main/core/parser/ast/BinaryOperatorNode.java +++ /dev/null @@ -1,17 +0,0 @@ -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/BlockBodyNode.java b/main/core/parser/ast/BlockBodyNode.java deleted file mode 100644 index 671f847..0000000 --- a/main/core/parser/ast/BlockBodyNode.java +++ /dev/null @@ -1,26 +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; -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/BooleanLiteralNode.java b/main/core/parser/ast/BooleanLiteralNode.java deleted file mode 100644 index 0d9c505..0000000 --- a/main/core/parser/ast/BooleanLiteralNode.java +++ /dev/null @@ -1,30 +0,0 @@ -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 java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 16.6.2016. - */ -public class BooleanLiteralNode extends ASTNode { - private BooleanDataContainer value; - - public BooleanLiteralNode(Token token) { - super(token); - value = new BooleanDataContainer(Boolean.parseBoolean(token.getText())); - } - - @Override - public DataContainer evaluate() { - return value; - } - - @Override - List<ASTNode> getChildren() { - return Arrays.asList(); - } -} diff --git a/main/core/parser/ast/BranchNode.java b/main/core/parser/ast/BranchNode.java deleted file mode 100644 index d6fb4cf..0000000 --- a/main/core/parser/ast/BranchNode.java +++ /dev/null @@ -1,42 +0,0 @@ -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/DivisionNode.java b/main/core/parser/ast/DivisionNode.java deleted file mode 100644 index 5bebf7b..0000000 --- a/main/core/parser/ast/DivisionNode.java +++ /dev/null @@ -1,39 +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.tokenizer.token.Token; -import com.jantuomi.interpreter.main.exception.ExceptionManager; -import com.jantuomi.interpreter.main.exception.InterpreterException; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 16.6.2016. - */ -public class DivisionNode extends BinaryOperatorNode { - - public DivisionNode(Token token, ASTNode lhs, ASTNode rhs) { - super(token, lhs, rhs); - } - - @Override - public DataContainer evaluate() throws InterpreterException { - DataContainer operand1 = lhs.evaluate(); - DataContainer operand2 = rhs.evaluate(); - - DataContainer result = operand1.divide(operand2); - if (result != null) { - return result; - } else { - ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, source.getLine(), - operand1.getType().toString(), operand2.getType().toString()); - return null; - } - - } - @Override - List<ASTNode> getChildren() { - return Arrays.asList(lhs, rhs); - } -} diff --git a/main/core/parser/ast/DoubleLiteralNode.java b/main/core/parser/ast/DoubleLiteralNode.java deleted file mode 100644 index a90c4af..0000000 --- a/main/core/parser/ast/DoubleLiteralNode.java +++ /dev/null @@ -1,30 +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.DoubleDataContainer; -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 DoubleLiteralNode extends ASTNode { - private DoubleDataContainer value; - - public DoubleLiteralNode(Token token) { - super(token); - value = new DoubleDataContainer(Double.parseDouble(token.getText())); - } - - @Override - public DataContainer evaluate() { - return value; - } - - @Override - List<ASTNode> getChildren() { - return Arrays.asList(); - } -} diff --git a/main/core/parser/ast/EmptyNode.java b/main/core/parser/ast/EmptyNode.java deleted file mode 100644 index 44bfcc9..0000000 --- a/main/core/parser/ast/EmptyNode.java +++ /dev/null @@ -1,27 +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; - -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/FunctionDefineNode.java b/main/core/parser/ast/FunctionDefineNode.java deleted file mode 100644 index 39a775a..0000000 --- a/main/core/parser/ast/FunctionDefineNode.java +++ /dev/null @@ -1,73 +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.StringDataContainer; -import com.jantuomi.interpreter.main.core.runtime.Function; -import com.jantuomi.interpreter.main.core.runtime.State; -import com.jantuomi.interpreter.main.core.tokenizer.token.Token; - -import java.util.ArrayList; -import java.util.List; - -/** - * 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() { - List<String> argumentNames = new ArrayList<>(); - for (ASTNode arg : args) { - SymbolNode argSym = (SymbolNode) arg; - argumentNames.add(argSym.getName()); - } - Function function = new Function(argumentNames, (BlockBodyNode) body); - function.setName(name); - State.getInstance().addFunctionToScope(name, function); - - return new StringDataContainer("function " + name); - } - - @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/IntegerLiteralNode.java b/main/core/parser/ast/IntegerLiteralNode.java deleted file mode 100644 index 68b57d7..0000000 --- a/main/core/parser/ast/IntegerLiteralNode.java +++ /dev/null @@ -1,30 +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.IntegerDataContainer; -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 IntegerLiteralNode extends ASTNode { - private IntegerDataContainer value; - - public IntegerLiteralNode(Token token) { - super(token); - value = new IntegerDataContainer(Integer.parseInt(token.getText())); - } - - @Override - public DataContainer evaluate() { - return value; - } - - @Override - List<ASTNode> getChildren() { - return Arrays.asList(); - } -} diff --git a/main/core/parser/ast/MultiplicationNode.java b/main/core/parser/ast/MultiplicationNode.java deleted file mode 100644 index 5d86cf3..0000000 --- a/main/core/parser/ast/MultiplicationNode.java +++ /dev/null @@ -1,39 +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.tokenizer.token.Token; -import com.jantuomi.interpreter.main.exception.ExceptionManager; -import com.jantuomi.interpreter.main.exception.InterpreterException; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 16.6.2016. - */ -public class MultiplicationNode extends BinaryOperatorNode { - - public MultiplicationNode(Token token, ASTNode lhs, ASTNode rhs) { - super(token, lhs, rhs); - } - - @Override - public DataContainer evaluate() throws InterpreterException { - DataContainer operand1 = lhs.evaluate(); - DataContainer operand2 = rhs.evaluate(); - - DataContainer result = operand1.multiply(operand2); - if (result != null) { - return result; - } else { - ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, source.getLine(), - operand1.getType().toString(), operand2.getType().toString()); - return null; - } - - } - @Override - List<ASTNode> getChildren() { - return Arrays.asList(lhs, rhs); - } -} diff --git a/main/core/parser/ast/NegationNode.java b/main/core/parser/ast/NegationNode.java deleted file mode 100644 index 1d381cb..0000000 --- a/main/core/parser/ast/NegationNode.java +++ /dev/null @@ -1,34 +0,0 @@ -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.parser.datatype.IntegerDataContainer; -import com.jantuomi.interpreter.main.core.tokenizer.token.Token; -import com.jantuomi.interpreter.main.exception.ExceptionManager; -import com.jantuomi.interpreter.main.exception.InterpreterException; - -/** - * Created by jan on 21.6.2016. - */ -public class NegationNode extends UnaryOperatorNode { - public NegationNode(Token token, ASTNode operand) { - super(token, operand); - } - - @Override - public DataContainer evaluate() throws InterpreterException { - DataContainer d = getOperand().evaluate(); - - if (d instanceof BooleanDataContainer) { - return new BooleanDataContainer(!((BooleanDataContainer) d).getData()); - } - else if (d instanceof IntegerDataContainer) { - return new BooleanDataContainer( - ((IntegerDataContainer) d).getData() != 0 - ); - } - ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, source.getLine(), "not", d.toString()); - return null; - - } -} diff --git a/main/core/parser/ast/ParameterListNode.java b/main/core/parser/ast/ParameterListNode.java deleted file mode 100644 index 50f919a..0000000 --- a/main/core/parser/ast/ParameterListNode.java +++ /dev/null @@ -1,38 +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.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/StringLiteralNode.java b/main/core/parser/ast/StringLiteralNode.java deleted file mode 100644 index 1ad5e2b..0000000 --- a/main/core/parser/ast/StringLiteralNode.java +++ /dev/null @@ -1,27 +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.StringDataContainer; -import com.jantuomi.interpreter.main.core.tokenizer.token.Token; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 21.6.2016. - */ -public class StringLiteralNode extends ASTNode { - @Override - public DataContainer evaluate() { - return new StringDataContainer(source.getText()); - } - - public StringLiteralNode(Token source) { - super(source); - } - - @Override - List<ASTNode> getChildren() { - return Arrays.asList(); - } -} diff --git a/main/core/parser/ast/SubtractionNode.java b/main/core/parser/ast/SubtractionNode.java deleted file mode 100644 index 6b05073..0000000 --- a/main/core/parser/ast/SubtractionNode.java +++ /dev/null @@ -1,38 +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.tokenizer.token.Token; -import com.jantuomi.interpreter.main.exception.ExceptionManager; -import com.jantuomi.interpreter.main.exception.InterpreterException; - -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() throws InterpreterException { - DataContainer operand1 = lhs.evaluate(); - DataContainer operand2 = rhs.evaluate(); - - DataContainer result = operand1.subtract(operand2); - if (result != null) { - return result; - } else { - ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, source.getLine(), - operand1.getType().toString(), operand2.getType().toString()); - return null; - } - - } - @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 deleted file mode 100644 index 5a4346a..0000000 --- a/main/core/parser/ast/SymbolNode.java +++ /dev/null @@ -1,70 +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 com.jantuomi.interpreter.main.exception.ExceptionManager; -import com.jantuomi.interpreter.main.exception.InterpreterException; -import com.sun.deploy.util.StringUtils; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * 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; - } - - public String getName() { - return name; - } - - private String name; - - public SymbolNode(Token token) { - super(token); - } - - @Override - public DataContainer evaluate() throws InterpreterException { - List<DataContainer> paramValues = new ArrayList<>(); - if (parameterListNode != null) { - for (ASTNode param : parameterListNode.getChildren()) { - paramValues.add(param.evaluate()); - } - } - DataContainer returnValue = State.getInstance().getSymbolValue(name, paramValues); - if (returnValue != null) { - return returnValue; - } else { - ExceptionManager.raise(InterpreterException.ExceptionType.UndeclaredSymbolError, source.getLine(), name, - StringUtils.join(paramValues.stream().map(dataContainer -> dataContainer.toString()).collect(Collectors.toList()), ",")); - return null; - } - } - - @Override - List<ASTNode> getChildren() { - if (parameterListNode == null) { - return Arrays.asList(); - } else { - return Arrays.asList(parameterListNode); - } - } -} diff --git a/main/core/parser/ast/UnaryOperatorNode.java b/main/core/parser/ast/UnaryOperatorNode.java deleted file mode 100644 index 283f07d..0000000 --- a/main/core/parser/ast/UnaryOperatorNode.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.jantuomi.interpreter.main.core.parser.ast; - -import com.jantuomi.interpreter.main.core.tokenizer.token.Token; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 21.6.2016. - */ -abstract public class UnaryOperatorNode extends ASTNode { - public UnaryOperatorNode(Token token, ASTNode operand) { - super(token); - this.operand = operand; - } - - public ASTNode getOperand() { - return operand; - } - - public void setOperand(ASTNode operand) { - this.operand = operand; - } - - private ASTNode operand; - - @Override - List<ASTNode> getChildren() { - return Arrays.asList(operand); - } -} diff --git a/main/core/parser/ast/VarargOperatorNode.java b/main/core/parser/ast/VarargOperatorNode.java deleted file mode 100644 index 96a7320..0000000 --- a/main/core/parser/ast/VarargOperatorNode.java +++ /dev/null @@ -1,26 +0,0 @@ -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; - } -} diff --git a/main/core/parser/ast/VariableDeclareNode.java b/main/core/parser/ast/VariableDeclareNode.java deleted file mode 100644 index 185edda..0000000 --- a/main/core/parser/ast/VariableDeclareNode.java +++ /dev/null @@ -1,32 +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.StringDataContainer; -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 20.6.2016. - */ -public class VariableDeclareNode extends ASTNode { - private SymbolNode variable; - - public VariableDeclareNode(Token source, SymbolNode variable) { - super(source); - this.variable = variable; - } - - @Override - public DataContainer evaluate() { - State.getInstance().addSymbolToScope(variable.getName()); - return new StringDataContainer(variable.getName()); - } - - @Override - List<ASTNode> getChildren() { - return Arrays.asList(); - } -} diff --git a/main/core/parser/datatype/BooleanDataContainer.java b/main/core/parser/datatype/BooleanDataContainer.java deleted file mode 100644 index e21ed96..0000000 --- a/main/core/parser/datatype/BooleanDataContainer.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.jantuomi.interpreter.main.core.parser.datatype; - -import com.jantuomi.interpreter.main.exception.InterpreterException; - -/** - * Created by jan on 16.6.2016. - */ -public class BooleanDataContainer extends DataContainer<Boolean> { - - - public BooleanDataContainer(boolean value) { - setData(value); - } - - @Override - public Type getType() { - return Type.Boolean; - } - - @Override - public String toString() { - return Boolean.toString(getData()); - } - - @Override - public DataContainer<Boolean> add(DataContainer<Boolean> other) throws InterpreterException { - return null; - } - - @Override - public DataContainer<Boolean> subtract(DataContainer<Boolean> other) throws InterpreterException { - return null; - } - - @Override - public DataContainer<Boolean> multiply(DataContainer<Boolean> other) throws InterpreterException { - return null; - } - - @Override - public DataContainer<Boolean> divide(DataContainer<Boolean> other) throws InterpreterException { - return null; - } -} diff --git a/main/core/parser/datatype/DataContainer.java b/main/core/parser/datatype/DataContainer.java deleted file mode 100644 index 5f46640..0000000 --- a/main/core/parser/datatype/DataContainer.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.jantuomi.interpreter.main.core.parser.datatype; - -import com.jantuomi.interpreter.main.exception.InterpreterException; - -/** - * Created by jan on 11.6.2016. - */ -abstract public class DataContainer<T> { - - public enum Type { - Integer, - Double, - String, - Boolean, - Void - } - - abstract public Type getType(); - - private T data; - - public T getData() { - return data; - } - - public void setData(T data) { - this.data = data; - } - - @Override - abstract public String toString(); - - abstract public DataContainer<T> add(DataContainer<T> other) throws InterpreterException; - public abstract DataContainer<T> subtract(DataContainer<T> other) throws InterpreterException; - public abstract DataContainer<T> multiply(DataContainer<T> other) throws InterpreterException; - public abstract DataContainer<T> divide(DataContainer<T> other) throws InterpreterException; -} diff --git a/main/core/parser/datatype/DoubleDataContainer.java b/main/core/parser/datatype/DoubleDataContainer.java deleted file mode 100644 index 9564ff9..0000000 --- a/main/core/parser/datatype/DoubleDataContainer.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.jantuomi.interpreter.main.core.parser.datatype; - -import com.jantuomi.interpreter.main.exception.InterpreterException; - -/** - * Created by jan on 22.6.2016. - */ -public class DoubleDataContainer extends DataContainer<Double> { - public DoubleDataContainer(double value) { - setData(value); - } - - @Override - public Type getType() { - return Type.Double; - } - - @Override - public String toString() { - return getData().toString(); - } - - @Override - public DataContainer add(DataContainer other) throws InterpreterException { - switch (other.getType()) { - case Double: - return new DoubleDataContainer( - getData() + ((DoubleDataContainer) other).getData() - ); - case Integer: - return new DoubleDataContainer( - getData() + ((IntegerDataContainer) other).getData() - ); - default: - return null; - } - } - - @Override - public DataContainer subtract(DataContainer other) throws InterpreterException { - switch (other.getType()) { - case Double: - return new DoubleDataContainer( - getData() - ((DoubleDataContainer) other).getData() - ); - case Integer: - return new DoubleDataContainer( - getData() - ((IntegerDataContainer) other).getData() - ); - default: - return null; - } - } - - @Override - public DataContainer multiply(DataContainer other) throws InterpreterException { - switch (other.getType()) { - case Double: - return new DoubleDataContainer( - getData() * ((DoubleDataContainer) other).getData() - ); - case Integer: - return new DoubleDataContainer( - getData() * ((IntegerDataContainer) other).getData() - ); - default: - return null; - } - } - - @Override - public DataContainer divide(DataContainer other) throws InterpreterException { - switch (other.getType()) { - case Double: - return new DoubleDataContainer( - getData() / ((DoubleDataContainer) other).getData() - ); - case Integer: - return new DoubleDataContainer( - getData() / ((IntegerDataContainer) other).getData() - ); - default: - return null; - } - } -} diff --git a/main/core/parser/datatype/IntegerDataContainer.java b/main/core/parser/datatype/IntegerDataContainer.java deleted file mode 100644 index 4f71e2b..0000000 --- a/main/core/parser/datatype/IntegerDataContainer.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.jantuomi.interpreter.main.core.parser.datatype; - -import com.jantuomi.interpreter.main.exception.InterpreterException; - -/** - * Created by jan on 16.6.2016. - */ -public class IntegerDataContainer extends DataContainer<Integer> { - - public IntegerDataContainer(int value) { - setData(value); - } - - @Override - public Type getType() { - return Type.Integer; - } - - @Override - public String toString() { - return Integer.toString(getData()); - } - - @Override - public DataContainer add(DataContainer other) { - switch (other.getType()) { - case Integer: - return new IntegerDataContainer( - this.getData() + ((IntegerDataContainer) other).getData() - ); - case Double: - return new DoubleDataContainer( - (double) getData() + ((DoubleDataContainer) other).getData() - ); - default: - return null; - - } - } - - @Override - public DataContainer subtract(DataContainer other) { - switch (other.getType()) { - case Integer: - return new IntegerDataContainer( - this.getData() - ((IntegerDataContainer) other).getData() - ); - case Double: - return new DoubleDataContainer( - (double) getData() - ((DoubleDataContainer) other).getData() - ); - default: - return null; - - } - } - - @Override - public DataContainer multiply(DataContainer other) throws InterpreterException { - switch (other.getType()) { - case Integer: - return new IntegerDataContainer( - this.getData() * ((IntegerDataContainer) other).getData() - ); - case Double: - return new DoubleDataContainer( - (double) getData() * ((DoubleDataContainer) other).getData() - ); - default: - return null; - - } - } - - @Override - public DataContainer divide(DataContainer other) throws InterpreterException { - switch (other.getType()) { - case Integer: - return new IntegerDataContainer( - this.getData() / ((IntegerDataContainer) other).getData() - ); - case Double: - return new DoubleDataContainer( - (double) getData() / ((DoubleDataContainer) other).getData() - ); - default: - return null; - - } - } -} diff --git a/main/core/parser/datatype/StringDataContainer.java b/main/core/parser/datatype/StringDataContainer.java deleted file mode 100644 index 68f41d9..0000000 --- a/main/core/parser/datatype/StringDataContainer.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.jantuomi.interpreter.main.core.parser.datatype; - -import com.jantuomi.interpreter.main.exception.InterpreterException; - -/** - * Created by jan on 16.6.2016. - */ -public class StringDataContainer extends DataContainer<String> { - - - public StringDataContainer(String text) { - setData(text); - } - - @Override - public Type getType() { - return Type.String; - } - - @Override - public String toString() { - return getData(); - } - - @Override - public DataContainer<String> add(DataContainer<String> other) { - return new StringDataContainer( - getData() + other.getData() - ); - } - - @Override - public DataContainer<String> subtract(DataContainer<String> other) throws InterpreterException { - return null; - } - - @Override - public DataContainer<String> multiply(DataContainer<String> other) throws InterpreterException { - return null; - } - - @Override - public DataContainer<String> divide(DataContainer<String> other) throws InterpreterException { - return null; - } -} diff --git a/main/core/parser/datatype/VoidDataContainer.java b/main/core/parser/datatype/VoidDataContainer.java deleted file mode 100644 index 098de8d..0000000 --- a/main/core/parser/datatype/VoidDataContainer.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.jantuomi.interpreter.main.core.parser.datatype; - -import com.jantuomi.interpreter.main.exception.InterpreterException; - -/** - * Created by jan on 17.6.2016. - */ -public class VoidDataContainer extends DataContainer<Integer> { - - @Override - public Type getType() { - return Type.Void; - } - - @Override - public String toString() { - return ""; - } - - @Override - public DataContainer<Integer> add(DataContainer<Integer> other) { - return null; - } - - @Override - public DataContainer<Integer> subtract(DataContainer<Integer> other) { - return null; - } - - @Override - public DataContainer<Integer> multiply(DataContainer<Integer> other) throws InterpreterException { - return null; - } - - @Override - public DataContainer<Integer> divide(DataContainer<Integer> other) throws InterpreterException { - return null; - } -} |
