aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/tokenizer
diff options
context:
space:
mode:
Diffstat (limited to 'main/core/tokenizer')
-rw-r--r--main/core/tokenizer/Tokenizer.java2
-rw-r--r--main/core/tokenizer/token/Token.java6
-rw-r--r--main/core/tokenizer/token/types/AdditionToken.java3
-rw-r--r--main/core/tokenizer/token/types/AssignmentToken.java55
-rw-r--r--main/core/tokenizer/token/types/FunctionBodyToken.java3
-rw-r--r--main/core/tokenizer/token/types/FunctionDefineToken.java3
-rw-r--r--main/core/tokenizer/token/types/OpenParenToken.java3
-rw-r--r--main/core/tokenizer/token/types/SubtractionToken.java3
-rw-r--r--main/core/tokenizer/token/types/SymbolToken.java3
-rw-r--r--main/core/tokenizer/token/types/VariableDeclareToken.java42
10 files changed, 115 insertions, 8 deletions
diff --git a/main/core/tokenizer/Tokenizer.java b/main/core/tokenizer/Tokenizer.java
index 9aed09c..30bc86e 100644
--- a/main/core/tokenizer/Tokenizer.java
+++ b/main/core/tokenizer/Tokenizer.java
@@ -41,7 +41,7 @@ public class Tokenizer {
tokenRegexes.put(Token.Type.SubtractionToken, "^(\\-)");
tokenRegexes.put(Token.Type.DivisionToken, "^(\\/)");
tokenRegexes.put(Token.Type.MultiplicationToken, "^(\\*)");
- tokenRegexes.put(Token.Type.AssignmentToken, "^(\\<\\-)");
+ tokenRegexes.put(Token.Type.AssignmentToken, "^(set)\\b");
tokenRegexes.put(Token.Type.LessThanToken, "^(\\<)");
tokenRegexes.put(Token.Type.GreaterThanToken, "^(\\>)");
tokenRegexes.put(Token.Type.LessOrEqualThanToken, "^(\\<\\=)");
diff --git a/main/core/tokenizer/token/Token.java b/main/core/tokenizer/token/Token.java
index 5248799..2582590 100644
--- a/main/core/tokenizer/token/Token.java
+++ b/main/core/tokenizer/token/Token.java
@@ -28,7 +28,7 @@ abstract public class Token {
}
}
- abstract public ASTNode generateNode();
+ abstract public ASTNode generateNode() throws InterpreterException;
/* Token types, ordered by precedence */
public enum Type {
@@ -165,6 +165,10 @@ abstract public class Token {
return new EndFunctionDefineToken();
case FunctionBodyToken:
return new FunctionBodyToken();
+ case DeclarationToken:
+ return new VariableDeclareToken();
+ case AssignmentToken:
+ return new AssignmentToken();
case SymbolToken:
return new SymbolToken(text);
case OpenParenToken:
diff --git a/main/core/tokenizer/token/types/AdditionToken.java b/main/core/tokenizer/token/types/AdditionToken.java
index 2d77b46..4623d73 100644
--- a/main/core/tokenizer/token/types/AdditionToken.java
+++ b/main/core/tokenizer/token/types/AdditionToken.java
@@ -2,6 +2,7 @@ package com.jantuomi.interpreter.main.core.tokenizer.token.types;
import com.jantuomi.interpreter.main.core.parser.ast.ASTNode;
import com.jantuomi.interpreter.main.core.parser.ast.AdditionNode;
+import com.jantuomi.interpreter.main.exception.InterpreterException;
/**
* Created by jan on 15.6.2016.
@@ -12,7 +13,7 @@ public class AdditionToken extends BinaryOperatorToken {
}
@Override
- public ASTNode generateNode() {
+ public ASTNode generateNode() throws InterpreterException {
return new AdditionNode(this,
lhs.generateNode(),
rhs.generateNode()
diff --git a/main/core/tokenizer/token/types/AssignmentToken.java b/main/core/tokenizer/token/types/AssignmentToken.java
new file mode 100644
index 0000000..57f404c
--- /dev/null
+++ b/main/core/tokenizer/token/types/AssignmentToken.java
@@ -0,0 +1,55 @@
+package com.jantuomi.interpreter.main.core.tokenizer.token.types;
+
+import com.jantuomi.interpreter.main.core.parser.ast.ASTNode;
+import com.jantuomi.interpreter.main.core.parser.ast.AssignmentNode;
+import com.jantuomi.interpreter.main.core.parser.ast.SymbolNode;
+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 20.6.2016.
+ */
+public class AssignmentToken extends Token {
+
+ private Token lhs;
+ private Token rhs;
+
+ public AssignmentToken() {
+ super(Type.AssignmentToken, "set");
+ }
+
+ // TODO this and the node
+
+ @Override
+ public ASTNode generateNode() throws InterpreterException {
+ ASTNode lhsNode = lhs.generateNode();
+
+ if (!(lhsNode instanceof SymbolNode)) {
+ ExceptionManager.raise(InterpreterException.ExceptionType.SyntaxError, getLine(), "non-symbol " + toString());
+ return null;
+ }
+
+ AssignmentNode node = new AssignmentNode(this,
+ (SymbolNode) lhsNode,
+ rhs.generateNode()
+ );
+
+ return node;
+ }
+
+ @Override
+ public Token setArguments(List<Token> args) {
+ this.lhs = args.get(0);
+ this.rhs = args.get(1);
+ return this;
+ }
+
+ @Override
+ public List<Token> getChildren() {
+ return Arrays.asList(lhs, rhs);
+ }
+}
diff --git a/main/core/tokenizer/token/types/FunctionBodyToken.java b/main/core/tokenizer/token/types/FunctionBodyToken.java
index 647ed55..f71e8a0 100644
--- a/main/core/tokenizer/token/types/FunctionBodyToken.java
+++ b/main/core/tokenizer/token/types/FunctionBodyToken.java
@@ -3,6 +3,7 @@ package com.jantuomi.interpreter.main.core.tokenizer.token.types;
import com.jantuomi.interpreter.main.core.parser.ast.ASTNode;
import com.jantuomi.interpreter.main.core.parser.ast.FunctionBodyNode;
import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+import com.jantuomi.interpreter.main.exception.InterpreterException;
import java.util.ArrayList;
import java.util.List;
@@ -16,7 +17,7 @@ public class FunctionBodyToken extends VarargOperatorToken {
}
@Override
- public ASTNode generateNode() {
+ public ASTNode generateNode() throws InterpreterException {
FunctionBodyNode node = new FunctionBodyNode(this);
List<ASTNode> statements = new ArrayList<>();
for (int i = 0; i < args.size() - 1; i++) {
diff --git a/main/core/tokenizer/token/types/FunctionDefineToken.java b/main/core/tokenizer/token/types/FunctionDefineToken.java
index 6bbfd84..116d3db 100644
--- a/main/core/tokenizer/token/types/FunctionDefineToken.java
+++ b/main/core/tokenizer/token/types/FunctionDefineToken.java
@@ -3,6 +3,7 @@ package com.jantuomi.interpreter.main.core.tokenizer.token.types;
import com.jantuomi.interpreter.main.core.parser.ast.ASTNode;
import com.jantuomi.interpreter.main.core.parser.ast.FunctionBodyNode;
import com.jantuomi.interpreter.main.core.parser.ast.FunctionDefineNode;
+import com.jantuomi.interpreter.main.exception.InterpreterException;
import java.util.ArrayList;
import java.util.List;
@@ -16,7 +17,7 @@ public class FunctionDefineToken extends VarargOperatorToken {
}
@Override
- public ASTNode generateNode() {
+ public ASTNode generateNode() throws InterpreterException {
FunctionDefineNode node = new FunctionDefineNode(this);
node.setName(args.get(0).getText());
diff --git a/main/core/tokenizer/token/types/OpenParenToken.java b/main/core/tokenizer/token/types/OpenParenToken.java
index 07385c9..80b507c 100644
--- a/main/core/tokenizer/token/types/OpenParenToken.java
+++ b/main/core/tokenizer/token/types/OpenParenToken.java
@@ -3,6 +3,7 @@ package com.jantuomi.interpreter.main.core.tokenizer.token.types;
import com.jantuomi.interpreter.main.core.parser.ast.ASTNode;
import com.jantuomi.interpreter.main.core.parser.ast.ParameterListNode;
import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+import com.jantuomi.interpreter.main.exception.InterpreterException;
/**
* Created by jan on 19.6.2016.
@@ -13,7 +14,7 @@ public class OpenParenToken extends VarargOperatorToken {
}
@Override
- public ASTNode generateNode() {
+ public ASTNode generateNode() throws InterpreterException {
ParameterListNode node = new ParameterListNode(this);
for (Token token : args) {
diff --git a/main/core/tokenizer/token/types/SubtractionToken.java b/main/core/tokenizer/token/types/SubtractionToken.java
index a1b9a83..9f7ff10 100644
--- a/main/core/tokenizer/token/types/SubtractionToken.java
+++ b/main/core/tokenizer/token/types/SubtractionToken.java
@@ -2,6 +2,7 @@ package com.jantuomi.interpreter.main.core.tokenizer.token.types;
import com.jantuomi.interpreter.main.core.parser.ast.ASTNode;
import com.jantuomi.interpreter.main.core.parser.ast.SubtractionNode;
+import com.jantuomi.interpreter.main.exception.InterpreterException;
/**
* Created by jan on 16.6.2016.
@@ -12,7 +13,7 @@ public class SubtractionToken extends BinaryOperatorToken {
}
@Override
- public ASTNode generateNode() {
+ public ASTNode generateNode() throws InterpreterException {
return new SubtractionNode(this,
lhs.generateNode(),
rhs.generateNode()
diff --git a/main/core/tokenizer/token/types/SymbolToken.java b/main/core/tokenizer/token/types/SymbolToken.java
index b091ac9..d750921 100644
--- a/main/core/tokenizer/token/types/SymbolToken.java
+++ b/main/core/tokenizer/token/types/SymbolToken.java
@@ -4,6 +4,7 @@ import com.jantuomi.interpreter.main.core.parser.ast.ASTNode;
import com.jantuomi.interpreter.main.core.parser.ast.ParameterListNode;
import com.jantuomi.interpreter.main.core.parser.ast.SymbolNode;
import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+import com.jantuomi.interpreter.main.exception.InterpreterException;
import java.util.Arrays;
import java.util.List;
@@ -24,7 +25,7 @@ public class SymbolToken extends Token {
}
@Override
- public ASTNode generateNode() {
+ public ASTNode generateNode() throws InterpreterException {
SymbolNode node = new SymbolNode(this);
node.setName(this.getText());
if (callArgumentList != null) {
diff --git a/main/core/tokenizer/token/types/VariableDeclareToken.java b/main/core/tokenizer/token/types/VariableDeclareToken.java
new file mode 100644
index 0000000..1ec0826
--- /dev/null
+++ b/main/core/tokenizer/token/types/VariableDeclareToken.java
@@ -0,0 +1,42 @@
+package com.jantuomi.interpreter.main.core.tokenizer.token.types;
+
+import com.jantuomi.interpreter.main.core.parser.ast.ASTNode;
+import com.jantuomi.interpreter.main.core.parser.ast.SymbolNode;
+import com.jantuomi.interpreter.main.core.parser.ast.VariableDeclareNode;
+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 20.6.2016.
+ */
+public class VariableDeclareToken extends Token {
+
+ private SymbolToken variable;
+
+ public VariableDeclareToken() {
+ super(Type.DeclarationToken, "decl");
+ }
+
+ @Override
+ public ASTNode generateNode() throws InterpreterException {
+ VariableDeclareNode node = new VariableDeclareNode(this,
+ (SymbolNode) variable.generateNode());
+ return node;
+ }
+
+ @Override
+ public Token setArguments(List<Token> args) {
+ if (args.size() > 0) {
+ this.variable = (SymbolToken) args.get(0);
+ }
+ return this;
+ }
+
+ @Override
+ public List<Token> getChildren() {
+ return Arrays.asList(variable);
+ }
+}