From a15873fb42e8db3b2101330514b2208ef3490d70 Mon Sep 17 00:00:00 2001 From: student Date: Mon, 12 Feb 2018 12:14:27 -0500 Subject: Further refactor SCL token organization Added some more SCL token subclasses to make it obvious what classes went to what token types. --- base/src/bjc/dicelang/scl/ArraySCLToken.java | 15 +++++++ base/src/bjc/dicelang/scl/SCLToken.java | 35 ++-------------- base/src/bjc/dicelang/scl/StreamControlEngine.java | 10 ++--- base/src/bjc/dicelang/scl/StringLitSCLToken.java | 13 ++++++ base/src/bjc/dicelang/scl/StringSCLToken.java | 2 +- base/src/bjc/dicelang/scl/SymbolSCLToken.java | 13 ++++++ base/src/bjc/dicelang/scl/WordListSCLToken.java | 48 ++++++++++++++++++++++ base/src/bjc/dicelang/scl/WordSCLToken.java | 44 ++++++++++++++++++++ base/src/bjc/dicelang/scl/WordsSCLToken.java | 19 ++++----- 9 files changed, 150 insertions(+), 49 deletions(-) create mode 100644 base/src/bjc/dicelang/scl/ArraySCLToken.java create mode 100644 base/src/bjc/dicelang/scl/StringLitSCLToken.java create mode 100644 base/src/bjc/dicelang/scl/SymbolSCLToken.java create mode 100644 base/src/bjc/dicelang/scl/WordListSCLToken.java (limited to 'base') diff --git a/base/src/bjc/dicelang/scl/ArraySCLToken.java b/base/src/bjc/dicelang/scl/ArraySCLToken.java new file mode 100644 index 0000000..ff86f48 --- /dev/null +++ b/base/src/bjc/dicelang/scl/ArraySCLToken.java @@ -0,0 +1,15 @@ +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/base/src/bjc/dicelang/scl/SCLToken.java b/base/src/bjc/dicelang/scl/SCLToken.java index 45e35f6..b5dadb0 100644 --- a/base/src/bjc/dicelang/scl/SCLToken.java +++ b/base/src/bjc/dicelang/scl/SCLToken.java @@ -9,7 +9,6 @@ import bjc.utils.parserutils.TokenUtils; import static bjc.dicelang.Errors.ErrorKey.EK_SCL_INVTOKEN; import static bjc.dicelang.scl.SCLToken.Type.*; -import static bjc.dicelang.scl.SCLToken.Word.*; public class SCLToken { @@ -21,24 +20,15 @@ public class SCLToken { SLIT, WORDS, ARRAY, } - 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 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 StringSCLToken(true, token.substring(1)); - } else if (builtinWords.containsKey(token)) { - return new WordSCLToken(builtinWords.get(token)); + 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")) { @@ -54,7 +44,6 @@ public class SCLToken { } protected static final Map litTokens; - protected static final Map builtinWords; protected SCLToken() { @@ -72,24 +61,6 @@ public class SCLToken { litTokens.put("\"", DQUOTE); litTokens.put("[", OBRACKET); litTokens.put("{", OBRACE); - - /* Init builtin words. */ - builtinWords = new HashMap<>(); - - builtinWords.put("makearray", MAKEARRAY); - builtinWords.put("+stream", NEWSTREAM); - builtinWords.put(">stream", LEFTSTREAM); - builtinWords.put(" 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/base/src/bjc/dicelang/scl/WordSCLToken.java b/base/src/bjc/dicelang/scl/WordSCLToken.java index 46aac4f..3fe78b3 100644 --- a/base/src/bjc/dicelang/scl/WordSCLToken.java +++ b/base/src/bjc/dicelang/scl/WordSCLToken.java @@ -1,8 +1,26 @@ 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); @@ -35,4 +53,30 @@ public class WordSCLToken extends SCLToken { 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(" tokenVals; +public class WordsSCLToken extends WordListSCLToken { - public WordsSCLToken(boolean isArray, IList tokens) { - if(isArray) { - type = Type.ARRAY; - } else { - type = Type.WORDS; - } - - tokenVals = tokens; + public WordsSCLToken(IList tokens) { + super(false, tokens); + } + + @Override + public String toString() { + return "WordsSCLToken [tokenVals=" + tokenVals + "]"; } } -- cgit v1.2.3