diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-10-25 12:10:14 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-10-25 12:10:14 -0300 |
| commit | 7bda9de511a5642efb297eae98c6ea7c42b27754 (patch) | |
| tree | dff1aa772b9ac088c5bd07b8d10d944cbff89f96 /base/src/bjc/dicelang/Token.java | |
| parent | f028ea6dc555fc5192a96b00b8e96e90dbf6de55 (diff) | |
Start switch to maven modules
Diffstat (limited to 'base/src/bjc/dicelang/Token.java')
| -rw-r--r-- | base/src/bjc/dicelang/Token.java | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/base/src/bjc/dicelang/Token.java b/base/src/bjc/dicelang/Token.java new file mode 100644 index 0000000..2841973 --- /dev/null +++ b/base/src/bjc/dicelang/Token.java @@ -0,0 +1,149 @@ +package bjc.dicelang; + +import bjc.dicelang.dice.DieExpression; +import bjc.utils.funcdata.IList; + +/* + * @TODO 10/09/17 Ben Culkin :TokenReorg + * Split the class into subclasses based off of type. + */ +/** + * Lexer token. + */ +@SuppressWarnings("javadoc") +public class Token { + public final static Token NIL_TOKEN = new Token(Type.NIL); + + /** + * Possible token types + */ + public static enum Type { + // Natural tokens + // These are produced from lexemes + ADD, SUBTRACT, MULTIPLY, DIVIDE, IDIVIDE, INT_LIT, FLOAT_LIT, STRING_LIT, VREF, DICE_LIT, DICESCALAR, DICEFUDGE, DICEGROUP, DICECONCAT, DICELIST, LET, BIND, COERCE, STRCAT, STRREP, OPAREN, CPAREN, OBRACKET, CBRACKET, OBRACE, CBRACE, + + // Synthetic tokens + // These are produced when needed + NIL, GROUPSEP, TOKGROUP, TAGOP, TAGOPR + } + + public final Type type; + + // This is used for the following token types + // INT_LIT (int value) + // STRING_LIT (index into string table) + // VREF (index into sym table) + // O* and C* (sym-count of current token) + public long intValue; + + // This is used for the following token types + // FLOAT_LIT (float value) + public double floatValue; + + // This is used for the following token types + // DICE_LIT (dice value) + public DieExpression diceValue; + + // This is used for the following token types + // TOKGROUP (the tokens in the group) + // TAG* (the tagged construct) + public IList<Token> tokenValues; + + public Token(final Type typ) { + type = typ; + } + + public Token(final Type typ, final long val) { + this(typ); + + intValue = val; + } + + public Token(final Type typ, final double val) { + this(typ); + + floatValue = val; + } + + public Token(final Type typ, final DieExpression val) { + this(typ); + + diceValue = val; + } + + public Token(final Type typ, final IList<Token> tkVals) { + this(typ); + + tokenValues = tkVals; + } + + @Override + public String toString() { + switch (type) { + case INT_LIT: + case STRING_LIT: + case VREF: + case OPAREN: + case CPAREN: + case OBRACKET: + case CBRACKET: + case OBRACE: + case CBRACE: + return type.toString() + "(" + intValue + ")"; + + case FLOAT_LIT: + return type.toString() + "(" + floatValue + ")"; + + case DICE_LIT: + return type.toString() + "(" + diceValue + ")"; + + case TAGOP: + case TAGOPR: + case TOKGROUP: + return type.toString() + "(" + tokenValues + ")"; + + default: + return type.toString(); + } + } + + @Override + public boolean equals(final Object other) { + if (!(other instanceof Token)) { + return false; + } + + final Token otk = (Token) other; + + if (otk.type != type) { + return false; + } + + switch (type) { + case OBRACE: + case OBRACKET: + return intValue == otk.intValue; + + default: + return true; + } + } + + public boolean isGrouper() { + switch (type) { + case OPAREN: + case OBRACE: + case OBRACKET: + return true; + + default: + return false; + } + } + + @Override + public int hashCode() { + // TODO Auto-generated method stub + return super.hashCode(); + } +} |
