aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2016-06-21 20:23:32 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2016-07-26 19:47:04 +0300
commita48ab32ea87b156145ccc454cdf71dc01cdda0fa (patch)
tree8120fbb9c7bb528ea0ce78857ebe1153e3c6c2da /main
parent45a2b88d584fc8bdee1fbaf0def1d9b55ba26eff (diff)
Add string literals
Diffstat (limited to 'main')
-rw-r--r--main/core/parser/ast/StringLiteralNode.java27
-rw-r--r--main/core/runtime/Interpreter.java9
-rw-r--r--main/core/tokenizer/token/Token.java2
-rw-r--r--main/core/tokenizer/token/types/StringLiteralToken.java33
4 files changed, 65 insertions, 6 deletions
diff --git a/main/core/parser/ast/StringLiteralNode.java b/main/core/parser/ast/StringLiteralNode.java
new file mode 100644
index 0000000..1ad5e2b
--- /dev/null
+++ b/main/core/parser/ast/StringLiteralNode.java
@@ -0,0 +1,27 @@
+package com.jantuomi.interpreter.main.core.parser.ast;
+
+import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
+import com.jantuomi.interpreter.main.core.parser.datatype.StringDataContainer;
+import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by jan on 21.6.2016.
+ */
+public class StringLiteralNode extends ASTNode {
+ @Override
+ public DataContainer evaluate() {
+ return new StringDataContainer(source.getText());
+ }
+
+ public StringLiteralNode(Token source) {
+ super(source);
+ }
+
+ @Override
+ List<ASTNode> getChildren() {
+ return Arrays.asList();
+ }
+}
diff --git a/main/core/runtime/Interpreter.java b/main/core/runtime/Interpreter.java
index 0789822..f84e7e7 100644
--- a/main/core/runtime/Interpreter.java
+++ b/main/core/runtime/Interpreter.java
@@ -2,9 +2,7 @@ package com.jantuomi.interpreter.main.core.runtime;
import com.jantuomi.interpreter.main.core.parser.ast.ASTNode;
import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
-import com.sun.deploy.util.StringUtils;
-import java.util.ArrayList;
import java.util.List;
/**
@@ -21,17 +19,16 @@ public class Interpreter {
}
public static String execute(List<ASTNode> sequence) {
- List<String> output = new ArrayList<>();
+ String output = "";
for (ASTNode node : sequence) {
DataContainer data = node.evaluate();
if (data != null) {
- String out = data.toString();
- output.add(out);
+ output = data.toString();
} else {
break;
}
}
- return StringUtils.join(output, " ");
+ return output;
}
}
diff --git a/main/core/tokenizer/token/Token.java b/main/core/tokenizer/token/Token.java
index 2582590..f058391 100644
--- a/main/core/tokenizer/token/Token.java
+++ b/main/core/tokenizer/token/Token.java
@@ -155,6 +155,8 @@ abstract public class Token {
case IntegerLiteralToken:
return new IntegerLiteralToken(text);
+ case StringLiteralToken:
+ return new StringLiteralToken(text, rawText);
case AdditionToken:
return new AdditionToken();
case SubtractionToken:
diff --git a/main/core/tokenizer/token/types/StringLiteralToken.java b/main/core/tokenizer/token/types/StringLiteralToken.java
new file mode 100644
index 0000000..8d6cb8a
--- /dev/null
+++ b/main/core/tokenizer/token/types/StringLiteralToken.java
@@ -0,0 +1,33 @@
+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.StringLiteralNode;
+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 StringLiteralToken extends Token {
+ public StringLiteralToken(String text, String rawText) {
+ super(Type.StringLiteralToken, text, rawText);
+ }
+
+ @Override
+ public ASTNode generateNode() throws InterpreterException {
+ return new StringLiteralNode(this);
+ }
+
+ @Override
+ public Token setArguments(List<Token> args) {
+ return this;
+ }
+
+ @Override
+ public List<Token> getChildren() {
+ return Arrays.asList();
+ }
+}