diff options
| author | jantuomi <jans.tuomi@gmail.com> | 2016-07-28 16:58:17 +0300 |
|---|---|---|
| committer | jantuomi <jans.tuomi@gmail.com> | 2016-07-28 16:58:17 +0300 |
| commit | 98c3ebe59f90826f82dd9dede0cca182a2e34142 (patch) | |
| tree | 7de98fba2d751e5ddd99b3721dfaa157d8949280 /src | |
| parent | 8c48145314883caefc9b6a5daa6b5b7adacfa2e6 (diff) | |
Add 'dset' keyword
Diffstat (limited to 'src')
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: |
