summaryrefslogtreecommitdiff
path: root/dice-lang/src/bjc/dicelang/v2/Node.java
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2017-02-19 08:30:45 -0500
committerbculkin2442 <bjculkin@mix.wvu.edu>2017-02-19 08:30:45 -0500
commite03b3f477bcc160b72af4ab09cd8d12081017d2c (patch)
treef4e1779c5cf3aa893bd7bdc6c826c64f15648ed9 /dice-lang/src/bjc/dicelang/v2/Node.java
parent03e40ec669ee51c697de64178af6bb662161a8ae (diff)
Lots of things, but mostly evaluation
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v2/Node.java')
-rw-r--r--dice-lang/src/bjc/dicelang/v2/Node.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/dice-lang/src/bjc/dicelang/v2/Node.java b/dice-lang/src/bjc/dicelang/v2/Node.java
new file mode 100644
index 0000000..bd191d2
--- /dev/null
+++ b/dice-lang/src/bjc/dicelang/v2/Node.java
@@ -0,0 +1,82 @@
+package bjc.dicelang.v2;
+
+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 Evaluator.Result 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, Evaluator.Result 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;
+ }
+ }
+}