From eff296cc2c354f311dfe7696184f0313a6f04713 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Tue, 21 Jun 2016 20:57:56 +0300 Subject: Add if branch token and node --- main/core/tokenizer/token/Token.java | 17 ++++++--- .../core/tokenizer/token/types/BlockBodyToken.java | 30 +++++++++++++++ main/core/tokenizer/token/types/BranchToken.java | 43 ++++++++++++++++++++++ .../token/types/EndFunctionDefineToken.java | 2 +- .../tokenizer/token/types/FunctionBodyToken.java | 30 --------------- .../tokenizer/token/types/FunctionDefineToken.java | 4 +- 6 files changed, 88 insertions(+), 38 deletions(-) create mode 100644 main/core/tokenizer/token/types/BlockBodyToken.java create mode 100644 main/core/tokenizer/token/types/BranchToken.java delete mode 100644 main/core/tokenizer/token/types/FunctionBodyToken.java (limited to 'main/core/tokenizer/token') 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/BlockBodyToken.java b/main/core/tokenizer/token/types/BlockBodyToken.java new file mode 100644 index 0000000..444ea1f --- /dev/null +++ b/main/core/tokenizer/token/types/BlockBodyToken.java @@ -0,0 +1,30 @@ +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.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 BlockBodyToken extends VarargOperatorToken { + public BlockBodyToken(String keyword) { + super(Type.FunctionBodyToken, keyword); + } + + @Override + public ASTNode generateNode() throws InterpreterException { + BlockBodyNode node = new BlockBodyNode(this); + List statements = new ArrayList<>(); + for (int i = 0; i < args.size() - 1; i++) { + Token arg = args.get(i); + statements.add(arg.generateNode()); + } + node.setArgs(statements); + return node; + } +} 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 args) { + expression = args.get(0); + branch = (BlockBodyToken) args.get(1); + return this; + } + + @Override + public List 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/FunctionBodyToken.java b/main/core/tokenizer/token/types/FunctionBodyToken.java deleted file mode 100644 index f71e8a0..0000000 --- a/main/core/tokenizer/token/types/FunctionBodyToken.java +++ /dev/null @@ -1,30 +0,0 @@ -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; - -/** - * Created by jan on 16.6.2016. - */ -public class FunctionBodyToken extends VarargOperatorToken { - public FunctionBodyToken() { - super(Type.FunctionBodyToken, "as"); - } - - @Override - public ASTNode generateNode() throws InterpreterException { - FunctionBodyNode node = new FunctionBodyNode(this); - List statements = new ArrayList<>(); - for (int i = 0; i < args.size() - 1; i++) { - Token arg = args.get(i); - statements.add(arg.generateNode()); - } - node.setArgs(statements); - return node; - } -} 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; } -- cgit v1.3