aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/Parser.java18
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java26
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/Tokenizer.java5
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/token/Token.java4
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/token/TokenFactory.java8
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/token/types/CallEndToken.java (renamed from src/main/com/jantuomi/tunkki/core/tokenizer/token/types/ClosedParenToken.java)6
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/token/types/CallToken.java40
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/token/types/OpenParenToken.java34
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/token/types/OptionalArgumentToken.java4
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/token/types/SymbolToken.java12
-rw-r--r--src/main/com/jantuomi/tunkki/core/tokenizer/token/types/VarargOperatorToken.java4
11 files changed, 81 insertions, 80 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/parser/Parser.java b/src/main/com/jantuomi/tunkki/core/parser/Parser.java
index 02357aa..f95f329 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/Parser.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/Parser.java
@@ -50,16 +50,14 @@ public class Parser {
This branch is executed if the token has a variable list of arguments
*/
if (argumentInfo.getVarargs()) {
- while (true) {
- if (stack.size() > 0) {
- Token arg = stack.pop();
- if (arg.getTokenType() != argumentInfo.getTerminator()) {
- args.add(arg);
- }
- else {
- args.add(arg);
- break;
- }
+ while (stack.size() > 0) {
+ Token arg = stack.pop();
+ if (arg.getTokenType() != argumentInfo.getTerminator()) {
+ args.add(arg);
+ }
+ else {
+ args.add(arg);
+ break;
}
}
}
diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java
index 07c4d9c..9376206 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java
@@ -8,7 +8,6 @@ import com.jantuomi.tunkki.exception.TunkkiError;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@@ -17,15 +16,15 @@ import java.util.stream.Collectors;
*/
public class SymbolNode extends ASTNode {
- public ParameterListNode getParameterListNode() {
- return parameterListNode;
+ public List<ASTNode> getParameters() {
+ return parameters;
}
- public void setParameterListNode(ParameterListNode parameterListNode) {
- this.parameterListNode = parameterListNode;
+ public void setParameters(List<ASTNode> parameters) {
+ this.parameters = parameters;
}
- private ParameterListNode parameterListNode;
+ private List<ASTNode> parameters = new ArrayList<>();
public void setName(String name) {
this.name = name;
@@ -44,11 +43,14 @@ public class SymbolNode extends ASTNode {
@Override
public DataContainer evaluate() throws TunkkiError {
List<DataContainer> paramValues = new ArrayList<>();
- if (parameterListNode != null) {
- for (ASTNode param : parameterListNode.getChildren()) {
- paramValues.add(param.evaluate());
+ for (ASTNode param : parameters) {
+ DataContainer value = param.evaluate();
+ if (value != null) {
+ paramValues.add(value);
}
+
}
+
DataContainer returnValue = State.getInstance().getSymbolValue(name, paramValues);
if (returnValue != null) {
return returnValue;
@@ -61,10 +63,6 @@ public class SymbolNode extends ASTNode {
@Override
List<ASTNode> getChildren() {
- if (parameterListNode == null) {
- return Arrays.asList();
- } else {
- return Arrays.asList(parameterListNode);
- }
+ return parameters;
}
}
diff --git a/src/main/com/jantuomi/tunkki/core/tokenizer/Tokenizer.java b/src/main/com/jantuomi/tunkki/core/tokenizer/Tokenizer.java
index db04ca0..a92ffa5 100644
--- a/src/main/com/jantuomi/tunkki/core/tokenizer/Tokenizer.java
+++ b/src/main/com/jantuomi/tunkki/core/tokenizer/Tokenizer.java
@@ -54,7 +54,7 @@ public class Tokenizer {
tokenRegexes.put(Token.Type.EqualsToken, "^(\\=\\=)");
tokenRegexes.put(Token.Type.NotEqualsToken, "^(\\!\\=)");
tokenRegexes.put(Token.Type.OpenParenToken, "^(\\()");
- tokenRegexes.put(Token.Type.ClosedParenToken, "^(\\))");
+ tokenRegexes.put(Token.Type.CallEndToken, "^(\\!)");
tokenRegexes.put(Token.Type.FunctionDefineToken, "^(func)\\b");
tokenRegexes.put(Token.Type.FunctionBodyToken, "^(as)\\b");
tokenRegexes.put(Token.Type.BranchBodyToken, "^(then)\\b");
@@ -63,7 +63,8 @@ public class Tokenizer {
tokenRegexes.put(Token.Type.DeclarationToken, "^(decl)\\b");
tokenRegexes.put(Token.Type.BranchToken, "^(if)\\b");
- tokenRegexes.put(Token.Type.SymbolToken, "^([a-zA-Z]+\\w*)");
+ tokenRegexes.put(Token.Type.CallToken, "^([a-zA-Z]+\\w*)\\?[\\s|\\!]");
+ tokenRegexes.put(Token.Type.SymbolToken, "^([a-zA-Z]+\\w*)\\b");
discardedTokenTypes.add(Token.Type.WhitespaceToken);
discardedTokenTypes.add(Token.Type.CommentToken);
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 b976064..b67632a 100644
--- a/src/main/com/jantuomi/tunkki/core/tokenizer/token/Token.java
+++ b/src/main/com/jantuomi/tunkki/core/tokenizer/token/Token.java
@@ -48,7 +48,7 @@ abstract public class Token {
NotEqualsToken,
OpenParenToken,
- ClosedParenToken,
+ CallEndToken,
FunctionDefineToken,
DeclarationToken,
@@ -63,6 +63,8 @@ abstract public class Token {
BranchToken,
SymbolToken,
+ CallToken,
+
EndBlockToken,
FunctionBodyToken,
BranchBodyToken,
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 28c6bd2..ee77415 100644
--- a/src/main/com/jantuomi/tunkki/core/tokenizer/token/TokenFactory.java
+++ b/src/main/com/jantuomi/tunkki/core/tokenizer/token/TokenFactory.java
@@ -56,10 +56,10 @@ public class TokenFactory {
return new AssignmentToken();
case SymbolToken:
return new SymbolToken(text);
- case OpenParenToken:
- return new OpenParenToken();
- case ClosedParenToken:
- return new ClosedParenToken();
+ case CallToken:
+ return new CallToken(text, rawText);
+ case CallEndToken:
+ return new CallEndToken();
case BranchToken:
return new BranchToken();
case NegationToken:
diff --git a/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/ClosedParenToken.java b/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/CallEndToken.java
index 4450818..5bf30d8 100644
--- a/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/ClosedParenToken.java
+++ b/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/CallEndToken.java
@@ -5,9 +5,9 @@ import com.jantuomi.tunkki.core.parser.ast.ASTNode;
/**
* Created by jan on 19.6.2016.
*/
-public class ClosedParenToken extends TerminalToken {
- public ClosedParenToken() {
- super(Type.ClosedParenToken);
+public class CallEndToken extends TerminalToken {
+ public CallEndToken() {
+ super(Type.CallEndToken);
}
@Override
diff --git a/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/CallToken.java b/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/CallToken.java
new file mode 100644
index 0000000..fb925f2
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/CallToken.java
@@ -0,0 +1,40 @@
+package com.jantuomi.tunkki.core.tokenizer.token.types;
+
+import com.jantuomi.tunkki.core.parser.ast.ASTNode;
+import com.jantuomi.tunkki.core.parser.ast.SymbolNode;
+import com.jantuomi.tunkki.core.tokenizer.token.Token;
+import com.jantuomi.tunkki.exception.TunkkiError;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by jan on 26.7.2016.
+ */
+public class CallToken extends VarargOperatorToken {
+ public CallToken(String text, String rawText) {
+ super(Type.CallToken, text, rawText);
+ }
+
+ @Override
+ public ASTNode generateNode() throws TunkkiError {
+ SymbolNode node = new SymbolNode(this);
+ node.setName(this.getText());
+
+ List<ASTNode> arguments = new ArrayList<>();
+
+ for (Token token : args) {
+ ASTNode arg = token.generateNode();
+ if (arg != null) {
+ arguments.add(arg);
+ }
+ }
+ node.setParameters(arguments);
+ return node;
+ }
+
+ @Override
+ public Type getTerminatorTokenType() {
+ return Type.CallEndToken;
+ }
+}
diff --git a/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/OpenParenToken.java b/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/OpenParenToken.java
deleted file mode 100644
index e5d55af..0000000
--- a/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/OpenParenToken.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.jantuomi.tunkki.core.tokenizer.token.types;
-
-import com.jantuomi.tunkki.core.parser.ast.ASTNode;
-import com.jantuomi.tunkki.core.parser.ast.ParameterListNode;
-import com.jantuomi.tunkki.core.tokenizer.token.Token;
-import com.jantuomi.tunkki.exception.TunkkiError;
-
-/**
- * Created by jan on 19.6.2016.
- */
-public class OpenParenToken extends VarargOperatorToken {
- public OpenParenToken() {
- super(Type.OpenParenToken);
- }
-
- @Override
- public ASTNode generateNode() throws TunkkiError {
- ParameterListNode node = new ParameterListNode(this);
-
- for (Token token : args) {
- if (token.getTokenType() == Type.ClosedParenToken) {
- continue;
- }
-
- node.addParameter(token.generateNode());
- }
- return node;
- }
-
- @Override
- public Type getTerminatorTokenType() {
- return Type.ClosedParenToken;
- }
-}
diff --git a/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/OptionalArgumentToken.java b/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/OptionalArgumentToken.java
index 42ac3f3..0f233e8 100644
--- a/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/OptionalArgumentToken.java
+++ b/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/OptionalArgumentToken.java
@@ -16,7 +16,7 @@ public abstract class OptionalArgumentToken extends Token {
protected Token optionalArgument;
- public void setOptionalArgument(OpenParenToken optionalArgument) {
+ public void setOptionalArgument(Token optionalArgument) {
this.optionalArgument = optionalArgument;
}
@@ -32,7 +32,7 @@ public abstract class OptionalArgumentToken extends Token {
@Override
public Token setArguments(List<Token> args) {
if (args.size() > 0) {
- setOptionalArgument((OpenParenToken) args.get(0));
+ setOptionalArgument(args.get(0));
}
return this;
}
diff --git a/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/SymbolToken.java b/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/SymbolToken.java
index 5e6c9df..eb98e7b 100644
--- a/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/SymbolToken.java
+++ b/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/SymbolToken.java
@@ -1,14 +1,13 @@
package com.jantuomi.tunkki.core.tokenizer.token.types;
import com.jantuomi.tunkki.core.parser.ast.ASTNode;
-import com.jantuomi.tunkki.core.parser.ast.ParameterListNode;
import com.jantuomi.tunkki.core.parser.ast.SymbolNode;
import com.jantuomi.tunkki.exception.TunkkiError;
/**
* Created by jan on 16.6.2016.
*/
-public class SymbolToken extends OptionalArgumentToken {
+public class SymbolToken extends TerminalToken {
public SymbolToken(String name) {
super(Type.SymbolToken, name);
@@ -18,14 +17,7 @@ public class SymbolToken extends OptionalArgumentToken {
public ASTNode generateNode() throws TunkkiError {
SymbolNode node = new SymbolNode(this);
node.setName(this.getText());
- if (optionalArgument != null) {
- node.setParameterListNode((ParameterListNode) optionalArgument.generateNode());
- }
- return node;
- }
- @Override
- public Type getOptionalArgumentType() {
- return Type.OpenParenToken;
+ return node;
}
}
diff --git a/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/VarargOperatorToken.java b/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/VarargOperatorToken.java
index 9344928..8df7fe2 100644
--- a/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/VarargOperatorToken.java
+++ b/src/main/com/jantuomi/tunkki/core/tokenizer/token/types/VarargOperatorToken.java
@@ -12,6 +12,10 @@ abstract public class VarargOperatorToken extends Token {
protected List<Token> args;
+ public VarargOperatorToken(Type type, String text, String rawText) {
+ super(type, text, rawText);
+ }
+
public VarargOperatorToken(Type type, String text) {
super(type, text);
}