aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/tokenizer/token
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2016-06-21 20:57:56 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2016-07-26 19:47:05 +0300
commiteff296cc2c354f311dfe7696184f0313a6f04713 (patch)
tree2bf777ea5fd87faaba36d8acf23d23fa9ec2c179 /main/core/tokenizer/token
parenta48ab32ea87b156145ccc454cdf71dc01cdda0fa (diff)
Add if branch token and node
Diffstat (limited to 'main/core/tokenizer/token')
-rw-r--r--main/core/tokenizer/token/Token.java17
-rw-r--r--main/core/tokenizer/token/types/BlockBodyToken.java (renamed from main/core/tokenizer/token/types/FunctionBodyToken.java)10
-rw-r--r--main/core/tokenizer/token/types/BranchToken.java43
-rw-r--r--main/core/tokenizer/token/types/EndFunctionDefineToken.java2
-rw-r--r--main/core/tokenizer/token/types/FunctionDefineToken.java4
5 files changed, 63 insertions, 13 deletions
diff --git a/main/core/tokenizer/token/Token.java b/main/core/tokenizer/token/Token.java
index f058391..9fce412 100644
--- a/main/core/tokenizer/token/Token.java
+++ b/main/core/tokenizer/token/Token.java
@@ -52,10 +52,11 @@ abstract public class Token {
IntegerLiteralToken,
WhitespaceToken,
NewlineToken,
- EndStatementToken,
+ BranchToken,
SymbolToken,
- EndFunctionDefineToken,
+ EndBlockToken,
FunctionBodyToken,
+ BranchBodyToken,
NotAToken
}
@@ -163,10 +164,12 @@ abstract public class Token {
return new SubtractionToken();
case FunctionDefineToken:
return new FunctionDefineToken();
- case EndFunctionDefineToken:
+ case EndBlockToken:
return new EndFunctionDefineToken();
case FunctionBodyToken:
- return new FunctionBodyToken();
+ return new BlockBodyToken("as");
+ case BranchBodyToken:
+ return new BlockBodyToken("then");
case DeclarationToken:
return new VariableDeclareToken();
case AssignmentToken:
@@ -177,6 +180,8 @@ abstract public class Token {
return new OpenParenToken();
case ClosedParenToken:
return new ClosedParenToken();
+ case BranchToken:
+ return new BranchToken();
default:
ExceptionManager.raise(InterpreterException.ExceptionType.IllegalTokenError, line,
type.toString()
@@ -195,10 +200,11 @@ abstract public class Token {
fdai.setVariable(true);
fdai.setTerminator(Type.FunctionBodyToken);
return fdai;
+ case BranchBodyToken:
case FunctionBodyToken:
ArgumentInfo fbai = new ArgumentInfo();
fbai.setVariable(true);
- fbai.setTerminator(Type.EndFunctionDefineToken);
+ fbai.setTerminator(Type.EndBlockToken);
return fbai;
case OpenParenToken:
ArgumentInfo opai = new ArgumentInfo();
@@ -220,6 +226,7 @@ abstract public class Token {
case GreaterOrEqualThanToken:
case EqualsToken:
case NotEqualsToken:
+ case BranchToken:
return new ArgumentInfo(2);
case DeclarationToken:
return new ArgumentInfo(1);
diff --git a/main/core/tokenizer/token/types/FunctionBodyToken.java b/main/core/tokenizer/token/types/BlockBodyToken.java
index f71e8a0..444ea1f 100644
--- a/main/core/tokenizer/token/types/FunctionBodyToken.java
+++ b/main/core/tokenizer/token/types/BlockBodyToken.java
@@ -1,7 +1,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.BlockBodyNode;
import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
import com.jantuomi.interpreter.main.exception.InterpreterException;
@@ -11,14 +11,14 @@ import java.util.List;
/**
* Created by jan on 16.6.2016.
*/
-public class FunctionBodyToken extends VarargOperatorToken {
- public FunctionBodyToken() {
- super(Type.FunctionBodyToken, "as");
+public class BlockBodyToken extends VarargOperatorToken {
+ public BlockBodyToken(String keyword) {
+ super(Type.FunctionBodyToken, keyword);
}
@Override
public ASTNode generateNode() throws InterpreterException {
- FunctionBodyNode node = new FunctionBodyNode(this);
+ BlockBodyNode node = new BlockBodyNode(this);
List<ASTNode> statements = new ArrayList<>();
for (int i = 0; i < args.size() - 1; i++) {
Token arg = args.get(i);
diff --git a/main/core/tokenizer/token/types/BranchToken.java b/main/core/tokenizer/token/types/BranchToken.java
new file mode 100644
index 0000000..84aeabb
--- /dev/null
+++ b/main/core/tokenizer/token/types/BranchToken.java
@@ -0,0 +1,43 @@
+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.BlockBodyNode;
+import com.jantuomi.interpreter.main.core.parser.ast.BranchNode;
+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 BranchToken extends Token {
+
+ private Token expression;
+ private BlockBodyToken branch;
+
+ public BranchToken() {
+ super(Type.BranchToken, "if");
+ }
+
+ @Override
+ public ASTNode generateNode() throws InterpreterException {
+ return new BranchNode(this,
+ expression.generateNode(),
+ (BlockBodyNode) branch.generateNode()
+ );
+ }
+
+ @Override
+ public Token setArguments(List<Token> args) {
+ expression = args.get(0);
+ branch = (BlockBodyToken) args.get(1);
+ return this;
+ }
+
+ @Override
+ public List<Token> getChildren() {
+ return Arrays.asList(expression, branch);
+ }
+}
diff --git a/main/core/tokenizer/token/types/EndFunctionDefineToken.java b/main/core/tokenizer/token/types/EndFunctionDefineToken.java
index ffd33c5..14b21f8 100644
--- a/main/core/tokenizer/token/types/EndFunctionDefineToken.java
+++ b/main/core/tokenizer/token/types/EndFunctionDefineToken.java
@@ -11,7 +11,7 @@ import java.util.List;
*/
public class EndFunctionDefineToken extends Token {
public EndFunctionDefineToken() {
- super(Type.EndFunctionDefineToken, "end");
+ super(Type.EndBlockToken, "end");
}
@Override
diff --git a/main/core/tokenizer/token/types/FunctionDefineToken.java b/main/core/tokenizer/token/types/FunctionDefineToken.java
index 116d3db..7d715a9 100644
--- a/main/core/tokenizer/token/types/FunctionDefineToken.java
+++ b/main/core/tokenizer/token/types/FunctionDefineToken.java
@@ -1,7 +1,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.BlockBodyNode;
import com.jantuomi.interpreter.main.core.parser.ast.FunctionDefineNode;
import com.jantuomi.interpreter.main.exception.InterpreterException;
@@ -27,7 +27,7 @@ public class FunctionDefineToken extends VarargOperatorToken {
}
node.setArgs(funcArgs);
- FunctionBodyNode bodyNode = (FunctionBodyNode) args.get(args.size() - 1).generateNode();
+ BlockBodyNode bodyNode = (BlockBodyNode) args.get(args.size() - 1).generateNode();
node.setBody(bodyNode);
return node;
}