From b219393cb0228cca8e2e5b3e9c045dbabbb347c0 Mon Sep 17 00:00:00 2001 From: student Date: Tue, 13 Feb 2018 11:18:56 -0500 Subject: Move tokens to new package --- .../main/java/bjc/dicelang/scl/ArraySCLToken.java | 15 ---- .../java/bjc/dicelang/scl/BooleanSCLToken.java | 39 ---------- .../main/java/bjc/dicelang/scl/FloatSCLToken.java | 41 ---------- .../main/java/bjc/dicelang/scl/IntSCLToken.java | 18 ----- scl/src/main/java/bjc/dicelang/scl/SCLToken.java | 90 --------------------- .../java/bjc/dicelang/scl/StreamControlEngine.java | 14 +++- .../java/bjc/dicelang/scl/StringLitSCLToken.java | 13 ---- .../main/java/bjc/dicelang/scl/StringSCLToken.java | 46 ----------- .../main/java/bjc/dicelang/scl/SymbolSCLToken.java | 13 ---- .../java/bjc/dicelang/scl/WordListSCLToken.java | 48 ------------ .../main/java/bjc/dicelang/scl/WordSCLToken.java | 82 ------------------- .../main/java/bjc/dicelang/scl/WordsSCLToken.java | 15 ---- .../bjc/dicelang/scl/tokens/ArraySCLToken.java | 15 ++++ .../bjc/dicelang/scl/tokens/BooleanSCLToken.java | 39 ++++++++++ .../bjc/dicelang/scl/tokens/FloatSCLToken.java | 41 ++++++++++ .../java/bjc/dicelang/scl/tokens/IntSCLToken.java | 18 +++++ .../java/bjc/dicelang/scl/tokens/SCLToken.java | 91 ++++++++++++++++++++++ .../bjc/dicelang/scl/tokens/StringLitSCLToken.java | 13 ++++ .../bjc/dicelang/scl/tokens/StringSCLToken.java | 46 +++++++++++ .../bjc/dicelang/scl/tokens/SymbolSCLToken.java | 13 ++++ .../bjc/dicelang/scl/tokens/WordListSCLToken.java | 48 ++++++++++++ .../java/bjc/dicelang/scl/tokens/WordSCLToken.java | 82 +++++++++++++++++++ .../bjc/dicelang/scl/tokens/WordsSCLToken.java | 15 ++++ 23 files changed, 432 insertions(+), 423 deletions(-) delete mode 100644 scl/src/main/java/bjc/dicelang/scl/ArraySCLToken.java delete mode 100644 scl/src/main/java/bjc/dicelang/scl/BooleanSCLToken.java delete mode 100644 scl/src/main/java/bjc/dicelang/scl/FloatSCLToken.java delete mode 100644 scl/src/main/java/bjc/dicelang/scl/IntSCLToken.java delete mode 100644 scl/src/main/java/bjc/dicelang/scl/SCLToken.java delete mode 100644 scl/src/main/java/bjc/dicelang/scl/StringLitSCLToken.java delete mode 100644 scl/src/main/java/bjc/dicelang/scl/StringSCLToken.java delete mode 100644 scl/src/main/java/bjc/dicelang/scl/SymbolSCLToken.java delete mode 100644 scl/src/main/java/bjc/dicelang/scl/WordListSCLToken.java delete mode 100644 scl/src/main/java/bjc/dicelang/scl/WordSCLToken.java delete mode 100644 scl/src/main/java/bjc/dicelang/scl/WordsSCLToken.java create mode 100644 scl/src/main/java/bjc/dicelang/scl/tokens/ArraySCLToken.java create mode 100644 scl/src/main/java/bjc/dicelang/scl/tokens/BooleanSCLToken.java create mode 100644 scl/src/main/java/bjc/dicelang/scl/tokens/FloatSCLToken.java create mode 100644 scl/src/main/java/bjc/dicelang/scl/tokens/IntSCLToken.java create mode 100644 scl/src/main/java/bjc/dicelang/scl/tokens/SCLToken.java create mode 100644 scl/src/main/java/bjc/dicelang/scl/tokens/StringLitSCLToken.java create mode 100644 scl/src/main/java/bjc/dicelang/scl/tokens/StringSCLToken.java create mode 100644 scl/src/main/java/bjc/dicelang/scl/tokens/SymbolSCLToken.java create mode 100644 scl/src/main/java/bjc/dicelang/scl/tokens/WordListSCLToken.java create mode 100644 scl/src/main/java/bjc/dicelang/scl/tokens/WordSCLToken.java create mode 100644 scl/src/main/java/bjc/dicelang/scl/tokens/WordsSCLToken.java (limited to 'scl/src') diff --git a/scl/src/main/java/bjc/dicelang/scl/ArraySCLToken.java b/scl/src/main/java/bjc/dicelang/scl/ArraySCLToken.java deleted file mode 100644 index ff86f48..0000000 --- a/scl/src/main/java/bjc/dicelang/scl/ArraySCLToken.java +++ /dev/null @@ -1,15 +0,0 @@ -package bjc.dicelang.scl; - -import bjc.utils.funcdata.IList; - -public class ArraySCLToken extends WordListSCLToken { - - public ArraySCLToken(IList tokens) { - super(true, tokens); - } - - @Override - public String toString() { - return "ArraySCLToken [tokenVals=" + tokenVals + "]"; - } -} diff --git a/scl/src/main/java/bjc/dicelang/scl/BooleanSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/BooleanSCLToken.java deleted file mode 100644 index e2e8e12..0000000 --- a/scl/src/main/java/bjc/dicelang/scl/BooleanSCLToken.java +++ /dev/null @@ -1,39 +0,0 @@ -package bjc.dicelang.scl; - -public class BooleanSCLToken extends SCLToken { - /* Used for BLIT */ - public boolean boolVal; - - public BooleanSCLToken(boolean val) { - super(Type.BLIT); - - boolVal = val; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + (boolVal ? 1231 : 1237); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; - BooleanSCLToken other = (BooleanSCLToken) obj; - if (boolVal != other.boolVal) - return false; - return true; - } - - @Override - public String toString() { - return "BooleanSCLToken [boolVal=" + boolVal + "]"; - } -} diff --git a/scl/src/main/java/bjc/dicelang/scl/FloatSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/FloatSCLToken.java deleted file mode 100644 index f02c796..0000000 --- a/scl/src/main/java/bjc/dicelang/scl/FloatSCLToken.java +++ /dev/null @@ -1,41 +0,0 @@ -package bjc.dicelang.scl; - -public class FloatSCLToken extends SCLToken { - /* Used for FLIT */ - public double floatVal; - - public FloatSCLToken(double val) { - super(Type.FLIT); - - floatVal = val; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - long temp; - temp = Double.doubleToLongBits(floatVal); - result = prime * result + (int) (temp ^ (temp >>> 32)); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; - FloatSCLToken other = (FloatSCLToken) obj; - if (Double.doubleToLongBits(floatVal) != Double.doubleToLongBits(other.floatVal)) - return false; - return true; - } - - @Override - public String toString() { - return "FloatSCLToken [floatVal=" + floatVal + "]"; - } -} diff --git a/scl/src/main/java/bjc/dicelang/scl/IntSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/IntSCLToken.java deleted file mode 100644 index 9e88dbe..0000000 --- a/scl/src/main/java/bjc/dicelang/scl/IntSCLToken.java +++ /dev/null @@ -1,18 +0,0 @@ -package bjc.dicelang.scl; - -public class IntSCLToken extends SCLToken { - /* Used for ILIT */ - public long intVal; - - /* Create a new token. */ - public IntSCLToken(final Type typ) { - super(typ); - } - - /* Create a new token. */ - public IntSCLToken(final long iVal) { - super(Type.ILIT); - - intVal = iVal; - } -} \ No newline at end of file diff --git a/scl/src/main/java/bjc/dicelang/scl/SCLToken.java b/scl/src/main/java/bjc/dicelang/scl/SCLToken.java deleted file mode 100644 index c4056e0..0000000 --- a/scl/src/main/java/bjc/dicelang/scl/SCLToken.java +++ /dev/null @@ -1,90 +0,0 @@ -package bjc.dicelang.scl; - -import java.util.HashMap; -import java.util.Map; - -import bjc.utils.parserutils.TokenUtils; - -import static bjc.dicelang.scl.Errors.ErrorKey.*; -import static bjc.dicelang.scl.SCLToken.Type.*; - -public class SCLToken { - - public static enum Type { - /* Natural tokens. These come directly from strings */ - ILIT, FLIT, BLIT, SQUOTE, DQUOTE, OBRACKET, OBRACE, SYMBOL, WORD, - - /* Synthetic tokens. These are produced from special tokens. */ - SLIT, WORDS, ARRAY, - } - - public SCLToken.Type type; - - public static SCLToken tokenizeString(final String token) { - if (litTokens.containsKey(token)) { - return new IntSCLToken(litTokens.get(token)); - } else if (token.startsWith("\\")) { - return new SymbolSCLToken(token.substring(1)); - } else if (WordSCLToken.isBuiltinWord(token)) { - return new WordSCLToken(token); - } else if (token.equals("true")) { - return new BooleanSCLToken(true); - } else if (token.equals("false")) { - return new BooleanSCLToken(false); - } else if (TokenUtils.isInt(token)) { - return new IntSCLToken(Long.parseLong(token)); - } else if (TokenUtils.isDouble(token)) { - return new FloatSCLToken(Double.parseDouble(token)); - } else { - Errors.inst.printError(EK_SCL_INVTOKEN, token); - return null; - } - } - - protected static final Map litTokens; - - protected SCLToken() { - - } - - protected SCLToken(Type typ) { - type = typ; - } - - static { - /* Init literal tokens. */ - litTokens = new HashMap<>(); - - litTokens.put("'", SQUOTE); - litTokens.put("\"", DQUOTE); - litTokens.put("[", OBRACKET); - litTokens.put("{", OBRACE); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((type == null) ? 0 : type.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - SCLToken other = (SCLToken) obj; - if (type != other.type) - return false; - return true; - } - - @Override - public String toString() { - return "SCLToken [type=" + type + "]"; - } -} \ No newline at end of file diff --git a/scl/src/main/java/bjc/dicelang/scl/StreamControlEngine.java b/scl/src/main/java/bjc/dicelang/scl/StreamControlEngine.java index 5224b6f..fa1055a 100644 --- a/scl/src/main/java/bjc/dicelang/scl/StreamControlEngine.java +++ b/scl/src/main/java/bjc/dicelang/scl/StreamControlEngine.java @@ -3,6 +3,14 @@ package bjc.dicelang.scl; import java.util.HashMap; import java.util.Map; +import bjc.dicelang.scl.tokens.ArraySCLToken; +import bjc.dicelang.scl.tokens.BooleanSCLToken; +import bjc.dicelang.scl.tokens.IntSCLToken; +import bjc.dicelang.scl.tokens.SCLToken; +import bjc.dicelang.scl.tokens.StringLitSCLToken; +import bjc.dicelang.scl.tokens.WordListSCLToken; +import bjc.dicelang.scl.tokens.WordSCLToken; +import bjc.dicelang.scl.tokens.WordsSCLToken; import bjc.utils.esodata.SimpleStack; import bjc.utils.esodata.Stack; import bjc.utils.funcdata.FunctionalList; @@ -10,8 +18,8 @@ import bjc.utils.funcdata.IList; import bjc.utils.parserutils.TokenUtils; import static bjc.dicelang.scl.Errors.ErrorKey.*; -import static bjc.dicelang.scl.SCLToken.Type.*; -import static bjc.dicelang.scl.WordSCLToken.Word.*; +import static bjc.dicelang.scl.tokens.SCLToken.Type.*; +import static bjc.dicelang.scl.tokens.WordSCLToken.Word.*; /* * @TODO 10/08/17 Ben Culkin :SCLReorg @@ -389,7 +397,7 @@ public class StreamControlEngine { String strang = TokenUtils.descapeString(sb.toString()); - curStack.push(new StringSCLToken(false, strang)); + curStack.push(new StringLitSCLToken(strang)); return n; } diff --git a/scl/src/main/java/bjc/dicelang/scl/StringLitSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/StringLitSCLToken.java deleted file mode 100644 index caf425a..0000000 --- a/scl/src/main/java/bjc/dicelang/scl/StringLitSCLToken.java +++ /dev/null @@ -1,13 +0,0 @@ -package bjc.dicelang.scl; - -public class StringLitSCLToken extends StringSCLToken { - - public StringLitSCLToken(String val) { - super(false, val); - } - - @Override - public String toString() { - return "StringLitSCLToken [stringVal=" + stringVal + "]"; - } -} diff --git a/scl/src/main/java/bjc/dicelang/scl/StringSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/StringSCLToken.java deleted file mode 100644 index 1436bc3..0000000 --- a/scl/src/main/java/bjc/dicelang/scl/StringSCLToken.java +++ /dev/null @@ -1,46 +0,0 @@ -package bjc.dicelang.scl; - -public class StringSCLToken extends SCLToken { - /* Used for SYMBOL & SLIT */ - public String stringVal; - - protected StringSCLToken(boolean isSymbol, String val) { - if (isSymbol) { - type = Type.SYMBOL; - } else { - type = Type.SLIT; - } - - stringVal = val; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((stringVal == null) ? 0 : stringVal.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; - StringSCLToken other = (StringSCLToken) obj; - if (stringVal == null) { - if (other.stringVal != null) - return false; - } else if (!stringVal.equals(other.stringVal)) - return false; - return true; - } - - @Override - public String toString() { - return "StringSCLToken [stringVal=" + stringVal + "]"; - } -} diff --git a/scl/src/main/java/bjc/dicelang/scl/SymbolSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/SymbolSCLToken.java deleted file mode 100644 index f841654..0000000 --- a/scl/src/main/java/bjc/dicelang/scl/SymbolSCLToken.java +++ /dev/null @@ -1,13 +0,0 @@ -package bjc.dicelang.scl; - -public class SymbolSCLToken extends StringSCLToken { - - public SymbolSCLToken(String val) { - super(true, val); - } - - @Override - public String toString() { - return "SymbolSCLToken [stringVal=" + stringVal + "]"; - } -} diff --git a/scl/src/main/java/bjc/dicelang/scl/WordListSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/WordListSCLToken.java deleted file mode 100644 index ffa0e85..0000000 --- a/scl/src/main/java/bjc/dicelang/scl/WordListSCLToken.java +++ /dev/null @@ -1,48 +0,0 @@ -package bjc.dicelang.scl; - -import bjc.utils.funcdata.IList; - -public class WordListSCLToken extends SCLToken { - /* Used for WORDS & ARRAY */ - public IList tokenVals; - - protected WordListSCLToken(boolean isArray, IList tokens) { - if (isArray) { - type = Type.ARRAY; - } else { - type = Type.WORDS; - } - - tokenVals = tokens; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((tokenVals == null) ? 0 : tokenVals.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; - WordListSCLToken other = (WordListSCLToken) obj; - if (tokenVals == null) { - if (other.tokenVals != null) - return false; - } else if (!tokenVals.equals(other.tokenVals)) - return false; - return true; - } - - @Override - public String toString() { - return "WordsSCLToken [tokenVals=" + tokenVals + "]"; - } -} diff --git a/scl/src/main/java/bjc/dicelang/scl/WordSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/WordSCLToken.java deleted file mode 100644 index ea3118e..0000000 --- a/scl/src/main/java/bjc/dicelang/scl/WordSCLToken.java +++ /dev/null @@ -1,82 +0,0 @@ -package bjc.dicelang.scl; - -import java.util.HashMap; -import java.util.Map; - -import static bjc.dicelang.scl.WordSCLToken.Word.*; - -public class WordSCLToken extends SCLToken { - public static enum Word { - /* Array manipulation */ - MAKEARRAY, MAKEEXEC, MAKEUNEXEC, - /* Stream manipulation */ - NEWSTREAM, LEFTSTREAM, RIGHTSTREAM, DELETESTREAM, MERGESTREAM, - /* Stack manipulation */ - STACKCOUNT, STACKEMPTY, DROP, NDROP, NIP, NNIP, - } - - public Word wordVal; - - public WordSCLToken(String wrd) { - this(builtinWords.get(wrd)); - } - - public WordSCLToken(Word wrd) { - super(Type.WORD); - - wordVal = wrd; - } - - @Override - public String toString() { - return "WordSCLToken [wordVal=" + wordVal + "]"; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((wordVal == null) ? 0 : wordVal.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; - WordSCLToken other = (WordSCLToken) obj; - if (wordVal != other.wordVal) - return false; - return true; - } - - public static boolean isBuiltinWord(String wrd) { - return builtinWords.containsKey(wrd); - } - - private static final Map builtinWords; - - static { - /* Init builtin words. */ - builtinWords = new HashMap<>(); - - builtinWords.put("makearray", MAKEARRAY); - builtinWords.put("+stream", NEWSTREAM); - builtinWords.put(">stream", LEFTSTREAM); - builtinWords.put(" tokens) { - super(false, tokens); - } - - @Override - public String toString() { - return "WordsSCLToken [tokenVals=" + tokenVals + "]"; - } -} diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/ArraySCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/ArraySCLToken.java new file mode 100644 index 0000000..28cab78 --- /dev/null +++ b/scl/src/main/java/bjc/dicelang/scl/tokens/ArraySCLToken.java @@ -0,0 +1,15 @@ +package bjc.dicelang.scl.tokens; + +import bjc.utils.funcdata.IList; + +public class ArraySCLToken extends WordListSCLToken { + + public ArraySCLToken(IList tokens) { + super(true, tokens); + } + + @Override + public String toString() { + return "ArraySCLToken [tokenVals=" + tokenVals + "]"; + } +} diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/BooleanSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/BooleanSCLToken.java new file mode 100644 index 0000000..bb6d1a2 --- /dev/null +++ b/scl/src/main/java/bjc/dicelang/scl/tokens/BooleanSCLToken.java @@ -0,0 +1,39 @@ +package bjc.dicelang.scl.tokens; + +public class BooleanSCLToken extends SCLToken { + /* Used for BLIT */ + public boolean boolVal; + + public BooleanSCLToken(boolean val) { + super(Type.BLIT); + + boolVal = val; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + (boolVal ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + BooleanSCLToken other = (BooleanSCLToken) obj; + if (boolVal != other.boolVal) + return false; + return true; + } + + @Override + public String toString() { + return "BooleanSCLToken [boolVal=" + boolVal + "]"; + } +} diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/FloatSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/FloatSCLToken.java new file mode 100644 index 0000000..835e881 --- /dev/null +++ b/scl/src/main/java/bjc/dicelang/scl/tokens/FloatSCLToken.java @@ -0,0 +1,41 @@ +package bjc.dicelang.scl.tokens; + +public class FloatSCLToken extends SCLToken { + /* Used for FLIT */ + public double floatVal; + + public FloatSCLToken(double val) { + super(Type.FLIT); + + floatVal = val; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + long temp; + temp = Double.doubleToLongBits(floatVal); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + FloatSCLToken other = (FloatSCLToken) obj; + if (Double.doubleToLongBits(floatVal) != Double.doubleToLongBits(other.floatVal)) + return false; + return true; + } + + @Override + public String toString() { + return "FloatSCLToken [floatVal=" + floatVal + "]"; + } +} diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/IntSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/IntSCLToken.java new file mode 100644 index 0000000..b185926 --- /dev/null +++ b/scl/src/main/java/bjc/dicelang/scl/tokens/IntSCLToken.java @@ -0,0 +1,18 @@ +package bjc.dicelang.scl.tokens; + +public class IntSCLToken extends SCLToken { + /* Used for ILIT */ + public long intVal; + + /* Create a new token. */ + public IntSCLToken(final Type typ) { + super(typ); + } + + /* Create a new token. */ + public IntSCLToken(final long iVal) { + super(Type.ILIT); + + intVal = iVal; + } +} \ No newline at end of file diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/SCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/SCLToken.java new file mode 100644 index 0000000..c0158d0 --- /dev/null +++ b/scl/src/main/java/bjc/dicelang/scl/tokens/SCLToken.java @@ -0,0 +1,91 @@ +package bjc.dicelang.scl.tokens; + +import java.util.HashMap; +import java.util.Map; + +import bjc.dicelang.scl.Errors; +import bjc.utils.parserutils.TokenUtils; + +import static bjc.dicelang.scl.Errors.ErrorKey.*; +import static bjc.dicelang.scl.tokens.SCLToken.Type.*; + +public class SCLToken { + + public static enum Type { + /* Natural tokens. These come directly from strings */ + ILIT, FLIT, BLIT, SQUOTE, DQUOTE, OBRACKET, OBRACE, SYMBOL, WORD, + + /* Synthetic tokens. These are produced from special tokens. */ + SLIT, WORDS, ARRAY, + } + + public SCLToken.Type type; + + public static SCLToken tokenizeString(final String token) { + if (litTokens.containsKey(token)) { + return new IntSCLToken(litTokens.get(token)); + } else if (token.startsWith("\\")) { + return new SymbolSCLToken(token.substring(1)); + } else if (WordSCLToken.isBuiltinWord(token)) { + return new WordSCLToken(token); + } else if (token.equals("true")) { + return new BooleanSCLToken(true); + } else if (token.equals("false")) { + return new BooleanSCLToken(false); + } else if (TokenUtils.isInt(token)) { + return new IntSCLToken(Long.parseLong(token)); + } else if (TokenUtils.isDouble(token)) { + return new FloatSCLToken(Double.parseDouble(token)); + } else { + Errors.inst.printError(EK_SCL_INVTOKEN, token); + return null; + } + } + + protected static final Map litTokens; + + protected SCLToken() { + + } + + protected SCLToken(Type typ) { + type = typ; + } + + static { + /* Init literal tokens. */ + litTokens = new HashMap<>(); + + litTokens.put("'", SQUOTE); + litTokens.put("\"", DQUOTE); + litTokens.put("[", OBRACKET); + litTokens.put("{", OBRACE); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((type == null) ? 0 : type.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SCLToken other = (SCLToken) obj; + if (type != other.type) + return false; + return true; + } + + @Override + public String toString() { + return "SCLToken [type=" + type + "]"; + } +} \ No newline at end of file diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/StringLitSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/StringLitSCLToken.java new file mode 100644 index 0000000..85c6cb0 --- /dev/null +++ b/scl/src/main/java/bjc/dicelang/scl/tokens/StringLitSCLToken.java @@ -0,0 +1,13 @@ +package bjc.dicelang.scl.tokens; + +public class StringLitSCLToken extends StringSCLToken { + + public StringLitSCLToken(String val) { + super(false, val); + } + + @Override + public String toString() { + return "StringLitSCLToken [stringVal=" + stringVal + "]"; + } +} diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/StringSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/StringSCLToken.java new file mode 100644 index 0000000..fcd339c --- /dev/null +++ b/scl/src/main/java/bjc/dicelang/scl/tokens/StringSCLToken.java @@ -0,0 +1,46 @@ +package bjc.dicelang.scl.tokens; + +public class StringSCLToken extends SCLToken { + /* Used for SYMBOL & SLIT */ + public String stringVal; + + protected StringSCLToken(boolean isSymbol, String val) { + if (isSymbol) { + type = Type.SYMBOL; + } else { + type = Type.SLIT; + } + + stringVal = val; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((stringVal == null) ? 0 : stringVal.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + StringSCLToken other = (StringSCLToken) obj; + if (stringVal == null) { + if (other.stringVal != null) + return false; + } else if (!stringVal.equals(other.stringVal)) + return false; + return true; + } + + @Override + public String toString() { + return "StringSCLToken [stringVal=" + stringVal + "]"; + } +} diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/SymbolSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/SymbolSCLToken.java new file mode 100644 index 0000000..c9ba43a --- /dev/null +++ b/scl/src/main/java/bjc/dicelang/scl/tokens/SymbolSCLToken.java @@ -0,0 +1,13 @@ +package bjc.dicelang.scl.tokens; + +public class SymbolSCLToken extends StringSCLToken { + + public SymbolSCLToken(String val) { + super(true, val); + } + + @Override + public String toString() { + return "SymbolSCLToken [stringVal=" + stringVal + "]"; + } +} diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/WordListSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/WordListSCLToken.java new file mode 100644 index 0000000..f6ae63b --- /dev/null +++ b/scl/src/main/java/bjc/dicelang/scl/tokens/WordListSCLToken.java @@ -0,0 +1,48 @@ +package bjc.dicelang.scl.tokens; + +import bjc.utils.funcdata.IList; + +public class WordListSCLToken extends SCLToken { + /* Used for WORDS & ARRAY */ + public IList tokenVals; + + protected WordListSCLToken(boolean isArray, IList tokens) { + if (isArray) { + type = Type.ARRAY; + } else { + type = Type.WORDS; + } + + tokenVals = tokens; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((tokenVals == null) ? 0 : tokenVals.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + WordListSCLToken other = (WordListSCLToken) obj; + if (tokenVals == null) { + if (other.tokenVals != null) + return false; + } else if (!tokenVals.equals(other.tokenVals)) + return false; + return true; + } + + @Override + public String toString() { + return "WordsSCLToken [tokenVals=" + tokenVals + "]"; + } +} diff --git a/scl/src/main/java/bjc/dicelang/scl/tokens/WordSCLToken.java b/scl/src/main/java/bjc/dicelang/scl/tokens/WordSCLToken.java new file mode 100644 index 0000000..dcbef72 --- /dev/null +++ b/scl/src/main/java/bjc/dicelang/scl/tokens/WordSCLToken.java @@ -0,0 +1,82 @@ +package bjc.dicelang.scl.tokens; + +import static bjc.dicelang.scl.tokens.WordSCLToken.Word.*; + +import java.util.HashMap; +import java.util.Map; + +public class WordSCLToken extends SCLToken { + public static enum Word { + /* Array manipulation */ + MAKEARRAY, MAKEEXEC, MAKEUNEXEC, + /* Stream manipulation */ + NEWSTREAM, LEFTSTREAM, RIGHTSTREAM, DELETESTREAM, MERGESTREAM, + /* Stack manipulation */ + STACKCOUNT, STACKEMPTY, DROP, NDROP, NIP, NNIP, + } + + public Word wordVal; + + public WordSCLToken(String wrd) { + this(builtinWords.get(wrd)); + } + + public WordSCLToken(Word wrd) { + super(Type.WORD); + + wordVal = wrd; + } + + @Override + public String toString() { + return "WordSCLToken [wordVal=" + wordVal + "]"; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((wordVal == null) ? 0 : wordVal.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + WordSCLToken other = (WordSCLToken) obj; + if (wordVal != other.wordVal) + return false; + return true; + } + + public static boolean isBuiltinWord(String wrd) { + return builtinWords.containsKey(wrd); + } + + private static final Map builtinWords; + + static { + /* Init builtin words. */ + builtinWords = new HashMap<>(); + + builtinWords.put("makearray", MAKEARRAY); + builtinWords.put("+stream", NEWSTREAM); + builtinWords.put(">stream", LEFTSTREAM); + builtinWords.put(" tokens) { + super(false, tokens); + } + + @Override + public String toString() { + return "WordsSCLToken [tokenVals=" + tokenVals + "]"; + } +} -- cgit v1.2.3