diff options
Diffstat (limited to 'base/src/bjc/dicelang/Node.java')
| -rw-r--r-- | base/src/bjc/dicelang/Node.java | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/base/src/bjc/dicelang/Node.java b/base/src/bjc/dicelang/Node.java new file mode 100644 index 0000000..4238cfc --- /dev/null +++ b/base/src/bjc/dicelang/Node.java @@ -0,0 +1,105 @@ +package bjc.dicelang; + +/* + * @TODO 10/09/17 Ben Culkin :NodeReorg + * Same thing, different class. Split into subclasses based off of the type + * values. + */ +/** + * Represents a node in the AST. + * + * @author Ben Culkin + */ +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(final Type typ) { + type = typ; + } + + public Node(final Type typ, final Token tokenVl) { + this(typ); + + tokenVal = tokenVl; + } + + public Node(final Type typ, final Token.Type opType) { + this(typ); + + operatorType = opType; + } + + public Node(final Type typ, final GroupType grupType) { + this(typ); + + groupType = grupType; + } + + public Node(final Type typ, final EvaluatorResult res) { + this(typ); + + resultVal = res; + } + + @Override + 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; + } + } + + @Override + public boolean equals(final Object other) { + if (!(other instanceof Node)) { + return false; + } + + final Node otk = (Node) other; + + if (otk.type != type) { + return false; + } + + switch (type) { + case OGROUP: + return tokenVal.equals(otk.tokenVal); + + default: + return true; + } + } + + @Override + public int hashCode() { + return super.hashCode(); + } +} |
