aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2016-06-21 21:23:34 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2016-07-26 19:47:05 +0300
commit885fb97dae384112110eb2980d80f45937637896 (patch)
treee24e3916fda9ce29360b5a01069339a10f41aff2
parenteff296cc2c354f311dfe7696184f0313a6f04713 (diff)
Add boolean literals 'true' and 'false'
-rw-r--r--main/core/parser/ast/BooleanLiteralNode.java30
-rw-r--r--main/core/parser/datatype/BooleanDataContainer.java5
-rw-r--r--main/core/parser/datatype/IntegerDataContainer.java10
-rw-r--r--main/core/parser/datatype/StringDataContainer.java14
-rw-r--r--main/core/tokenizer/Tokenizer.java3
-rw-r--r--main/core/tokenizer/token/Token.java3
-rw-r--r--main/core/tokenizer/token/types/BooleanLiteralToken.java32
-rw-r--r--test/resources/program.bork9
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