aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/tokenizer/token/Token.java
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2016-06-16 20:21:25 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2016-07-26 19:47:02 +0300
commitd35a37a449d31e6f4b43b937abf7b0e1fc497828 (patch)
tree8d65ac1068dbf09de480e7cae0fb39ec21d330ec /main/core/tokenizer/token/Token.java
parentf441022881945db08846e09a8f3bfee2f8cfa95d (diff)
Grammar now uses reverse polish notation
Diffstat (limited to 'main/core/tokenizer/token/Token.java')
-rw-r--r--main/core/tokenizer/token/Token.java57
1 files changed, 55 insertions, 2 deletions
diff --git a/main/core/tokenizer/token/Token.java b/main/core/tokenizer/token/Token.java
index 99ae913..0d4395e 100644
--- a/main/core/tokenizer/token/Token.java
+++ b/main/core/tokenizer/token/Token.java
@@ -1,8 +1,12 @@
package com.jantuomi.interpreter.main.core.tokenizer.token;
+import com.jantuomi.interpreter.main.core.parser.ast.ASTNode;
+import com.jantuomi.interpreter.main.core.tokenizer.token.types.AdditionToken;
+import com.jantuomi.interpreter.main.core.tokenizer.token.types.IntegerLiteralToken;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -10,7 +14,19 @@ import java.util.regex.Pattern;
/**
* Created by jan on 10.6.2016.
*/
-public class Token {
+abstract public class Token {
+
+ public void print(int indent) {
+ for (int i = 0; i < indent; i++) {
+ System.out.print("\t");
+ }
+ System.out.println(toString());
+ for (Token child : getChildren()) {
+ child.print(indent + 1);
+ }
+ }
+
+ abstract public ASTNode generateNode();
/* Token types, ordered by precedence */
public enum Type {
@@ -40,6 +56,10 @@ public class Token {
NotAToken
}
+ abstract public Token setArguments(List<Token> args);
+
+ abstract public List<Token> getChildren();
+
public boolean is(Type type) {
return getTokenType() == type;
}
@@ -120,12 +140,45 @@ public class Token {
String text = matcher.group(1);
String rawText = matcher.group(0);
- return new Token(type, text, rawText);
+ switch (type) {
+ case IntegerLiteralToken:
+ return new IntegerLiteralToken(text);
+ case AdditionToken:
+ return new AdditionToken();
+ default:
+ return null;
+ }
}
return null;
}
+ public ArgumentInfo getArgumentInfo() {
+ switch (getTokenType()) {
+
+ case FunctionDefineToken:
+ ArgumentInfo ai = new ArgumentInfo();
+ ai.setVariable(true);
+ return ai;
+ case AdditionToken:
+ case SubtractionToken:
+ case DivisionToken:
+ case MultiplicationToken:
+ case AssignmentToken:
+ case LessThanToken:
+ case GreaterThanToken:
+ case LessOrEqualThanToken:
+ case GreaterOrEqualThanToken:
+ case EqualsToken:
+ case NotEqualsToken:
+ return new ArgumentInfo(2);
+ case DeclarationToken:
+ return new ArgumentInfo(1);
+ default:
+ return new ArgumentInfo(0);
+ }
+ }
+
@Override
public int hashCode() {
return new HashCodeBuilder(17, 37)