diff options
Diffstat (limited to 'main/core/tokenizer')
| -rw-r--r-- | main/core/tokenizer/Tokenizer.java | 2 | ||||
| -rw-r--r-- | main/core/tokenizer/token/Token.java | 17 | ||||
| -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.java | 43 | ||||
| -rw-r--r-- | main/core/tokenizer/token/types/EndFunctionDefineToken.java | 2 | ||||
| -rw-r--r-- | main/core/tokenizer/token/types/FunctionDefineToken.java | 4 |
6 files changed, 64 insertions, 14 deletions
diff --git a/main/core/tokenizer/Tokenizer.java b/main/core/tokenizer/Tokenizer.java index 30bc86e..78acd1b 100644 --- a/main/core/tokenizer/Tokenizer.java +++ b/main/core/tokenizer/Tokenizer.java @@ -52,7 +52,7 @@ public class Tokenizer { tokenRegexes.put(Token.Type.ClosedParenToken, "^(\\))"); tokenRegexes.put(Token.Type.FunctionDefineToken, "^(func)\\b"); tokenRegexes.put(Token.Type.FunctionBodyToken, "^(as)\\b"); - tokenRegexes.put(Token.Type.EndFunctionDefineToken, "^(end)\\b"); + tokenRegexes.put(Token.Type.EndBlockToken, "^(end)\\b"); tokenRegexes.put(Token.Type.DeclarationToken, "^(decl)\\b"); tokenRegexes.put(Token.Type.IntegerLiteralToken, "^(\\d+)"); tokenRegexes.put(Token.Type.SymbolToken, "^([a-zA-Z]+\\w*)"); 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; } |
