aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/parser
diff options
context:
space:
mode:
Diffstat (limited to 'main/core/parser')
-rw-r--r--main/core/parser/ast/ASTNode.java3
-rw-r--r--main/core/parser/ast/AdditionNode.java3
-rw-r--r--main/core/parser/ast/AssignmentNode.java3
-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.java42
-rw-r--r--main/core/parser/ast/FunctionDefineNode.java2
-rw-r--r--main/core/parser/ast/SubtractionNode.java3
-rw-r--r--main/core/parser/ast/SymbolNode.java3
-rw-r--r--main/core/parser/datatype/BooleanDataContainer.java33
-rw-r--r--main/core/parser/datatype/DataContainer.java6
10 files changed, 94 insertions, 11 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()) {
diff --git a/main/core/parser/datatype/BooleanDataContainer.java b/main/core/parser/datatype/BooleanDataContainer.java
new file mode 100644
index 0000000..1536fca
--- /dev/null
+++ b/main/core/parser/datatype/BooleanDataContainer.java
@@ -0,0 +1,33 @@
+package com.jantuomi.interpreter.main.core.parser.datatype;
+
+import com.jantuomi.interpreter.main.exception.ExceptionManager;
+import com.jantuomi.interpreter.main.exception.InterpreterException;
+
+/**
+ * Created by jan on 16.6.2016.
+ */
+public class BooleanDataContainer extends DataContainer<Boolean> {
+
+ private boolean value;
+
+ public BooleanDataContainer(boolean value) {
+ this.value = value;
+ }
+
+ @Override
+ public String toString() {
+ return Boolean.toString(value);
+ }
+
+ @Override
+ public DataContainer<Boolean> add(DataContainer<Boolean> other) throws InterpreterException {
+ ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, -1, "boolean", "boolean");
+ return null;
+ }
+
+ @Override
+ public DataContainer<Boolean> subtract(DataContainer<Boolean> other) throws InterpreterException {
+ ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, -1, "boolean", "boolean");
+ return null;
+ }
+}
diff --git a/main/core/parser/datatype/DataContainer.java b/main/core/parser/datatype/DataContainer.java
index b504bd6..2214d80 100644
--- a/main/core/parser/datatype/DataContainer.java
+++ b/main/core/parser/datatype/DataContainer.java
@@ -1,5 +1,7 @@
package com.jantuomi.interpreter.main.core.parser.datatype;
+import com.jantuomi.interpreter.main.exception.InterpreterException;
+
/**
* Created by jan on 11.6.2016.
*/
@@ -24,6 +26,6 @@ abstract public class DataContainer<T> {
@Override
abstract public String toString();
- abstract public DataContainer<T> add(DataContainer<T> other);
- public abstract DataContainer<T> subtract(DataContainer<T> other);
+ abstract public DataContainer<T> add(DataContainer<T> other) throws InterpreterException;
+ public abstract DataContainer<T> subtract(DataContainer<T> other) throws InterpreterException;
}