aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/com
diff options
context:
space:
mode:
authorjantuomi <jans.tuomi@gmail.com>2016-07-28 16:58:17 +0300
committerjantuomi <jans.tuomi@gmail.com>2016-07-28 16:58:17 +0300
commit98c3ebe59f90826f82dd9dede0cca182a2e34142 (patch)
tree7de98fba2d751e5ddd99b3721dfaa157d8949280 /src/main/com
parent8c48145314883caefc9b6a5daa6b5b7adacfa2e6 (diff)
Add 'dset' keyword
Diffstat (limited to 'src/main/com')
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/Parser.java4
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/ast/DeclareAssignNode.java45
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/datatype/ListDataContainer.java3
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/datatype/StringDataContainer.java2
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/Tokenizer.java3
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/token/Token.java2
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/token/TokenFactory.java2
7 files changed, 54 insertions, 7 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/parser/Parser.java b/src/main/com/jantuomi/tunkki/core/parser/Parser.java
index 88a056a..e686377 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/Parser.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/Parser.java
@@ -76,8 +76,8 @@ public class Parser {
if (stack.size() > 0) {
args.add(stack.pop());
} else {
- ExceptionManager.raise(TunkkiError.ExceptionType.FunctionArgumentError, t.getLine(),
- t.toString(), Integer.toString(argumentInfo.getCount()));
+ ExceptionManager.raise(TunkkiError.ExceptionType.ExpectedDifferentTokenError, t.getLine(),
+ t.getText());
return null;
}
}
diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/DeclareAssignNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/DeclareAssignNode.java
new file mode 100644
index 0000000..6e951cb
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/core/parser/ast/DeclareAssignNode.java
@@ -0,0 +1,45 @@
+package com.jantuomi.tunkki.core.parser.ast;
+
+import com.jantuomi.tunkki.core.parser.datatype.DataContainer;
+import com.jantuomi.tunkki.core.parser.datatype.StringDataContainer;
+import com.jantuomi.tunkki.core.runtime.State;
+import com.jantuomi.tunkki.core.tokenizer.token.Token;
+import com.jantuomi.tunkki.exception.TunkkiError;
+import com.sun.java_cup.internal.runtime.Symbol;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by jan on 21.6.2016.
+ */
+public class DeclareAssignNode extends BinaryOperatorNode {
+ public DeclareAssignNode(Token token, SymbolNode lhs, ASTNode rhs) {
+ super(token, lhs, rhs);
+ }
+
+ @Override
+ public DataContainer evaluate() throws TunkkiError {
+ SymbolNode var;
+ try {
+ var = (SymbolNode) lhs;
+ }
+ catch (Exception ex) {
+ throw new TunkkiError(TunkkiError.ExceptionType.ExpectedDifferentTokenError, getLine(), getText());
+ }
+
+ State.getInstance().addSymbolToScope(var.getName());
+
+ DataContainer rValue = rhs.evaluate();
+ State.getInstance().setSymbolValueToScope(
+ var.getName(),
+ rValue
+ );
+ return rValue;
+ }
+
+ @Override
+ List<ASTNode> getChildren() {
+ return Arrays.asList(lhs, rhs);
+ }
+}
diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDataContainer.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDataContainer.java
index b8afb9f..1557350 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDataContainer.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDataContainer.java
@@ -22,8 +22,7 @@ public class ListDataContainer extends DataContainer<List<DataContainer>> {
@Override
public String toString() {
- List<String> strings = getData().stream().map( dataContainer -> dataContainer.toString() ).collect(Collectors.toList());
- return String.format("[%s]", String.join(", ", strings));
+ return DataContainer.toString(getData());
}
@Override
diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/StringDataContainer.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/StringDataContainer.java
index 51d3805..caba77c 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/datatype/StringDataContainer.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/StringDataContainer.java
@@ -19,7 +19,7 @@ public class StringDataContainer extends DataContainer<String> {
@Override
public String toString() {
- return getData();
+ return String.format("\"%s\"", getData());
}
@Override
diff --git a/src/main/com/jantuomi/tunkki/core/tokenizer/Tokenizer.java b/src/main/com/jantuomi/tunkki/core/tokenizer/Tokenizer.java
index a92ffa5..a055074 100644
--- a/src/main/com/jantuomi/tunkki/core/tokenizer/Tokenizer.java
+++ b/src/main/com/jantuomi/tunkki/core/tokenizer/Tokenizer.java
@@ -46,7 +46,8 @@ public class Tokenizer {
tokenRegexes.put(Token.Type.SubtractionToken, "^(\\-)");
tokenRegexes.put(Token.Type.DivisionToken, "^(\\/)");
tokenRegexes.put(Token.Type.MultiplicationToken, "^(\\*)");
- tokenRegexes.put(Token.Type.AssignmentToken, "^(set)\\b");
+ tokenRegexes.put(Token.Type.DeclareAssignToken, "^(dset)\\b");
+ tokenRegexes.put(Token.Type.AssignmentToken, "^(?<!d)(set)\\b");
tokenRegexes.put(Token.Type.LessThanToken, "^(\\<)");
tokenRegexes.put(Token.Type.GreaterThanToken, "^(\\>)");
tokenRegexes.put(Token.Type.LessOrEqualThanToken, "^(\\<\\=)");
diff --git a/src/main/com/jantuomi/tunkki/core/tokenizer/token/Token.java b/src/main/com/jantuomi/tunkki/core/tokenizer/token/Token.java
index b67632a..d689556 100644
--- a/src/main/com/jantuomi/tunkki/core/tokenizer/token/Token.java
+++ b/src/main/com/jantuomi/tunkki/core/tokenizer/token/Token.java
@@ -70,7 +70,7 @@ abstract public class Token {
BranchBodyToken,
NegationToken,
- NotAToken
+ DeclareAssignToken, NotAToken
}
abstract public Token setArguments(List<Token> args);
diff --git a/src/main/com/jantuomi/tunkki/core/tokenizer/token/TokenFactory.java b/src/main/com/jantuomi/tunkki/core/tokenizer/token/TokenFactory.java
index ee77415..878b6ba 100644
--- a/src/main/com/jantuomi/tunkki/core/tokenizer/token/TokenFactory.java
+++ b/src/main/com/jantuomi/tunkki/core/tokenizer/token/TokenFactory.java
@@ -54,6 +54,8 @@ public class TokenFactory {
return new VariableDeclareToken();
case AssignmentToken:
return new AssignmentToken();
+ case DeclareAssignToken:
+ return new DeclareAssignToken();
case SymbolToken:
return new SymbolToken(text);
case CallToken: