diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2016-06-21 21:23:34 +0300 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2016-07-26 19:47:05 +0300 |
| commit | 885fb97dae384112110eb2980d80f45937637896 (patch) | |
| tree | e24e3916fda9ce29360b5a01069339a10f41aff2 | |
| parent | eff296cc2c354f311dfe7696184f0313a6f04713 (diff) | |
Add boolean literals 'true' and 'false'
| -rw-r--r-- | main/core/parser/ast/BooleanLiteralNode.java | 30 | ||||
| -rw-r--r-- | main/core/parser/datatype/BooleanDataContainer.java | 5 | ||||
| -rw-r--r-- | main/core/parser/datatype/IntegerDataContainer.java | 10 | ||||
| -rw-r--r-- | main/core/parser/datatype/StringDataContainer.java | 14 | ||||
| -rw-r--r-- | main/core/tokenizer/Tokenizer.java | 3 | ||||
| -rw-r--r-- | main/core/tokenizer/token/Token.java | 3 | ||||
| -rw-r--r-- | main/core/tokenizer/token/types/BooleanLiteralToken.java | 32 | ||||
| -rw-r--r-- | test/resources/program.bork | 9 |
8 files changed, 91 insertions, 15 deletions
diff --git a/main/core/parser/ast/BooleanLiteralNode.java b/main/core/parser/ast/BooleanLiteralNode.java new file mode 100644 index 0000000..0d9c505 --- /dev/null +++ b/main/core/parser/ast/BooleanLiteralNode.java @@ -0,0 +1,30 @@ +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 java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 16.6.2016. + */ +public class BooleanLiteralNode extends ASTNode { + private BooleanDataContainer value; + + public BooleanLiteralNode(Token token) { + super(token); + value = new BooleanDataContainer(Boolean.parseBoolean(token.getText())); + } + + @Override + public DataContainer evaluate() { + return value; + } + + @Override + List<ASTNode> getChildren() { + return Arrays.asList(); + } +} diff --git a/main/core/parser/datatype/BooleanDataContainer.java b/main/core/parser/datatype/BooleanDataContainer.java index 1536fca..af814bb 100644 --- a/main/core/parser/datatype/BooleanDataContainer.java +++ b/main/core/parser/datatype/BooleanDataContainer.java @@ -8,15 +8,14 @@ import com.jantuomi.interpreter.main.exception.InterpreterException; */ public class BooleanDataContainer extends DataContainer<Boolean> { - private boolean value; public BooleanDataContainer(boolean value) { - this.value = value; + setData(value); } @Override public String toString() { - return Boolean.toString(value); + return Boolean.toString(getData()); } @Override diff --git a/main/core/parser/datatype/IntegerDataContainer.java b/main/core/parser/datatype/IntegerDataContainer.java index 650db5c..1999131 100644 --- a/main/core/parser/datatype/IntegerDataContainer.java +++ b/main/core/parser/datatype/IntegerDataContainer.java @@ -5,28 +5,26 @@ package com.jantuomi.interpreter.main.core.parser.datatype; */ public class IntegerDataContainer extends DataContainer<Integer> { - private int value; - public IntegerDataContainer(int value) { - this.value = value; + setData(value); } @Override public String toString() { - return Integer.toString(value); + return Integer.toString(getData()); } @Override public DataContainer<Integer> add(DataContainer<Integer> other) { return new IntegerDataContainer( - this.value + ((IntegerDataContainer) other).value + this.getData() + other.getData() ); } @Override public DataContainer<Integer> subtract(DataContainer<Integer> other) { return new IntegerDataContainer( - this.value - ((IntegerDataContainer) other).value + this.getData() - other.getData() ); } } diff --git a/main/core/parser/datatype/StringDataContainer.java b/main/core/parser/datatype/StringDataContainer.java index 9916f77..bbc9b29 100644 --- a/main/core/parser/datatype/StringDataContainer.java +++ b/main/core/parser/datatype/StringDataContainer.java @@ -1,29 +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 StringDataContainer extends DataContainer<String> { - private String value; + public StringDataContainer(String text) { - this.value = text; + setData(text); } @Override public String toString() { - return value; + return getData(); } @Override public DataContainer<String> add(DataContainer<String> other) { return new StringDataContainer( - value + ((StringDataContainer) other).value + getData() + other.getData() ); } @Override - public DataContainer<String> subtract(DataContainer<String> other) { + public DataContainer<String> subtract(DataContainer<String> other) throws InterpreterException { + ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, -1, "string", "string"); return null; } } diff --git a/main/core/tokenizer/Tokenizer.java b/main/core/tokenizer/Tokenizer.java index 78acd1b..8837ad1 100644 --- a/main/core/tokenizer/Tokenizer.java +++ b/main/core/tokenizer/Tokenizer.java @@ -52,9 +52,12 @@ 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.BranchBodyToken, "^(then)\\b"); tokenRegexes.put(Token.Type.EndBlockToken, "^(end)\\b"); tokenRegexes.put(Token.Type.DeclarationToken, "^(decl)\\b"); + tokenRegexes.put(Token.Type.BranchToken, "^(if)\\b"); tokenRegexes.put(Token.Type.IntegerLiteralToken, "^(\\d+)"); + tokenRegexes.put(Token.Type.BooleanLiteralToken, "^(true|false)\\b"); tokenRegexes.put(Token.Type.SymbolToken, "^([a-zA-Z]+\\w*)"); discardedTokenTypes.add(Token.Type.WhitespaceToken); diff --git a/main/core/tokenizer/token/Token.java b/main/core/tokenizer/token/Token.java index 9fce412..436160a 100644 --- a/main/core/tokenizer/token/Token.java +++ b/main/core/tokenizer/token/Token.java @@ -50,6 +50,7 @@ abstract public class Token { DeclarationToken, StringLiteralToken, IntegerLiteralToken, + BooleanLiteralToken, WhitespaceToken, NewlineToken, BranchToken, @@ -158,6 +159,8 @@ abstract public class Token { return new IntegerLiteralToken(text); case StringLiteralToken: return new StringLiteralToken(text, rawText); + case BooleanLiteralToken: + return new BooleanLiteralToken(text); case AdditionToken: return new AdditionToken(); case SubtractionToken: diff --git a/main/core/tokenizer/token/types/BooleanLiteralToken.java b/main/core/tokenizer/token/types/BooleanLiteralToken.java new file mode 100644 index 0000000..6e28b82 --- /dev/null +++ b/main/core/tokenizer/token/types/BooleanLiteralToken.java @@ -0,0 +1,32 @@ +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.BooleanLiteralNode; +import com.jantuomi.interpreter.main.core.tokenizer.token.Token; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 15.6.2016. + */ +public class BooleanLiteralToken extends Token{ + public BooleanLiteralToken(String text) { + super(Type.BooleanLiteralToken, text); + } + + @Override + public ASTNode generateNode() { + return new BooleanLiteralNode(this); + } + + @Override + public Token setArguments(List<Token> args) { + return this; + } + + @Override + public List<Token> getChildren() { + return Arrays.asList(); + } +} diff --git a/test/resources/program.bork b/test/resources/program.bork index 40bb6d5..3638ce8 100644 --- a/test/resources/program.bork +++ b/test/resources/program.bork @@ -1,6 +1,6 @@ /* Test program */ - +/* func sum x y as + x y end @@ -10,3 +10,10 @@ set x 10 set y 20 sum(x y) +*/ + +decl var set var true + +if var then + "var on tosi!" +end
\ No newline at end of file |
