summaryrefslogtreecommitdiff
path: root/dice-lang/src/bjc/dicelang/Node.java
diff options
context:
space:
mode:
Diffstat (limited to 'dice-lang/src/bjc/dicelang/Node.java')
-rw-r--r--dice-lang/src/bjc/dicelang/Node.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/dice-lang/src/bjc/dicelang/Node.java b/dice-lang/src/bjc/dicelang/Node.java
new file mode 100644
index 0000000..3ae54e3
--- /dev/null
+++ b/dice-lang/src/bjc/dicelang/Node.java
@@ -0,0 +1,82 @@
+package bjc.dicelang;
+
+public class Node {
+ public static enum Type {
+ ROOT, TOKREF,
+ UNARYOP, BINOP,
+ GROUP, OGROUP,
+ RESULT
+ }
+
+ public static enum GroupType {
+ ARRAY, CODE
+ }
+
+ public final Type type;
+
+ // These can have or not have values based of the node type
+ public Token tokenVal;
+ public Token.Type operatorType;
+ public GroupType groupType;
+ public EvaluatorResult resultVal;
+
+ public Node(Type typ) {
+ type = typ;
+ }
+
+ public Node(Type typ, Token tokenVl) {
+ this(typ);
+
+ tokenVal = tokenVl;
+ }
+
+ public Node(Type typ, Token.Type opType) {
+ this(typ);
+
+ operatorType = opType;
+ }
+
+ public Node(Type typ, GroupType grupType) {
+ this(typ);
+
+ groupType = grupType;
+ }
+
+ public Node(Type typ, EvaluatorResult res) {
+ this(typ);
+
+ resultVal = res;
+ }
+
+ public String toString() {
+ switch(type) {
+ case UNARYOP:
+ case BINOP:
+ return "(" + type.name() + " : " + operatorType + ")";
+ case OGROUP:
+ case TOKREF:
+ return "(" + type.name() + " : " + tokenVal + ")";
+ case GROUP:
+ return "(" + type.name() + " : " + groupType + ")";
+ case RESULT:
+ return "(" + type.name() + " : " + resultVal + ")";
+ default:
+ return "Unknown node type " + type;
+ }
+ }
+
+ public boolean equals(Object other) {
+ if(!(other instanceof Node)) return false;
+
+ Node otk = (Node)other;
+
+ if(otk.type != type) return false;
+
+ switch(type) {
+ case OGROUP:
+ return tokenVal.equals(otk.tokenVal);
+ default:
+ return true;
+ }
+ }
+}