diff options
| author | student <student@localhost> | 2018-02-12 12:14:27 -0500 |
|---|---|---|
| committer | student <student@localhost> | 2018-02-12 12:14:27 -0500 |
| commit | a15873fb42e8db3b2101330514b2208ef3490d70 (patch) | |
| tree | 3883743f9d91363a28e6b7cda3f8fb1bcdb591d2 /base/src | |
| parent | c25b68c6b24d86b7d1169ad4ec1e619d79a2b38d (diff) | |
Further refactor SCL token organization
Added some more SCL token subclasses to make it obvious what classes
went to what token types.
Diffstat (limited to 'base/src')
| -rw-r--r-- | base/src/bjc/dicelang/scl/ArraySCLToken.java | 15 | ||||
| -rw-r--r-- | base/src/bjc/dicelang/scl/SCLToken.java | 35 | ||||
| -rw-r--r-- | base/src/bjc/dicelang/scl/StreamControlEngine.java | 10 | ||||
| -rw-r--r-- | base/src/bjc/dicelang/scl/StringLitSCLToken.java | 13 | ||||
| -rw-r--r-- | base/src/bjc/dicelang/scl/StringSCLToken.java | 2 | ||||
| -rw-r--r-- | base/src/bjc/dicelang/scl/SymbolSCLToken.java | 13 | ||||
| -rw-r--r-- | base/src/bjc/dicelang/scl/WordListSCLToken.java | 48 | ||||
| -rw-r--r-- | base/src/bjc/dicelang/scl/WordSCLToken.java | 44 | ||||
| -rw-r--r-- | base/src/bjc/dicelang/scl/WordsSCLToken.java | 19 |
9 files changed, 150 insertions, 49 deletions
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<SCLToken> 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<String, Type> litTokens; - protected static final Map<String, Word> 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("<stream", RIGHTSTREAM); - builtinWords.put("-stream", DELETESTREAM); - builtinWords.put("<-stream", MERGESTREAM); - builtinWords.put("cvx", MAKEEXEC); - builtinWords.put("cvux", MAKEUNEXEC); - builtinWords.put("#", STACKCOUNT); - builtinWords.put("empty?", STACKEMPTY); - builtinWords.put("drop", DROP); - builtinWords.put("ndrop", NDROP); - builtinWords.put("nip", NIP); - builtinWords.put("nnip", NNIP); } @Override diff --git a/base/src/bjc/dicelang/scl/StreamControlEngine.java b/base/src/bjc/dicelang/scl/StreamControlEngine.java index 073f15e..8d83aa2 100644 --- a/base/src/bjc/dicelang/scl/StreamControlEngine.java +++ b/base/src/bjc/dicelang/scl/StreamControlEngine.java @@ -12,7 +12,7 @@ import bjc.utils.parserutils.TokenUtils; import static bjc.dicelang.Errors.ErrorKey.*; import static bjc.dicelang.scl.SCLToken.Type.*; -import static bjc.dicelang.scl.SCLToken.Word.*; +import static bjc.dicelang.scl.WordSCLToken.Word.*; /* * @TODO 10/08/17 Ben Culkin :SCLReorg @@ -92,7 +92,7 @@ public class StreamControlEngine { return false; } final SCLToken brak = curStack.pop(); - curStack.push(new WordsSCLToken(true, ((WordsSCLToken) brak).tokenVals)); + curStack.push(new ArraySCLToken(((WordListSCLToken) brak).tokenVals)); break; case WORD: @@ -281,7 +281,7 @@ public class StreamControlEngine { arr.add(curStack.pop()); } - curStack.push(new WordsSCLToken(true, arr)); + curStack.push(new ArraySCLToken(arr)); return true; } @@ -323,7 +323,7 @@ public class StreamControlEngine { return -1; } final SCLToken brak = curStack.pop(); - toks.add(new WordsSCLToken(true, ((WordsSCLToken) brak).tokenVals)); + toks.add(new ArraySCLToken(((WordListSCLToken) brak).tokenVals)); break; default: toks.add(ntok); @@ -346,7 +346,7 @@ public class StreamControlEngine { /* * @NOTE Instead of being hardcoded, this should be a parameter. */ - curStack.push(new WordsSCLToken(false, toks)); + curStack.push(new WordsSCLToken(toks)); return n; } diff --git a/base/src/bjc/dicelang/scl/StringLitSCLToken.java b/base/src/bjc/dicelang/scl/StringLitSCLToken.java new file mode 100644 index 0000000..caf425a --- /dev/null +++ b/base/src/bjc/dicelang/scl/StringLitSCLToken.java @@ -0,0 +1,13 @@ +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/base/src/bjc/dicelang/scl/StringSCLToken.java b/base/src/bjc/dicelang/scl/StringSCLToken.java index d50b7e9..f594c4c 100644 --- a/base/src/bjc/dicelang/scl/StringSCLToken.java +++ b/base/src/bjc/dicelang/scl/StringSCLToken.java @@ -4,7 +4,7 @@ public class StringSCLToken extends SCLToken { /* Used for SYMBOL & SLIT */ public String stringVal; - public StringSCLToken(boolean isSymbol, String val) { + protected StringSCLToken(boolean isSymbol, String val) { if(isSymbol) { type = Type.SYMBOL; } else { diff --git a/base/src/bjc/dicelang/scl/SymbolSCLToken.java b/base/src/bjc/dicelang/scl/SymbolSCLToken.java new file mode 100644 index 0000000..f841654 --- /dev/null +++ b/base/src/bjc/dicelang/scl/SymbolSCLToken.java @@ -0,0 +1,13 @@ +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/base/src/bjc/dicelang/scl/WordListSCLToken.java b/base/src/bjc/dicelang/scl/WordListSCLToken.java new file mode 100644 index 0000000..d13f7ab --- /dev/null +++ b/base/src/bjc/dicelang/scl/WordListSCLToken.java @@ -0,0 +1,48 @@ +package bjc.dicelang.scl; + +import bjc.utils.funcdata.IList; + +public class WordListSCLToken extends SCLToken { + /* Used for WORDS & ARRAY */ + public IList<SCLToken> tokenVals; + + protected WordListSCLToken(boolean isArray, IList<SCLToken> 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<String, WordSCLToken.Word> builtinWords; + + static { + /* Init builtin words. */ + builtinWords = new HashMap<>(); + + builtinWords.put("makearray", MAKEARRAY); + builtinWords.put("+stream", NEWSTREAM); + builtinWords.put(">stream", LEFTSTREAM); + builtinWords.put("<stream", RIGHTSTREAM); + builtinWords.put("-stream", DELETESTREAM); + builtinWords.put("<-stream", MERGESTREAM); + builtinWords.put("cvx", MAKEEXEC); + builtinWords.put("cvux", MAKEUNEXEC); + builtinWords.put("#", STACKCOUNT); + builtinWords.put("empty?", STACKEMPTY); + builtinWords.put("drop", DROP); + builtinWords.put("ndrop", NDROP); + builtinWords.put("nip", NIP); + builtinWords.put("nnip", NNIP); + } } diff --git a/base/src/bjc/dicelang/scl/WordsSCLToken.java b/base/src/bjc/dicelang/scl/WordsSCLToken.java index 81453dc..9a57176 100644 --- a/base/src/bjc/dicelang/scl/WordsSCLToken.java +++ b/base/src/bjc/dicelang/scl/WordsSCLToken.java @@ -2,17 +2,14 @@ package bjc.dicelang.scl; import bjc.utils.funcdata.IList; -public class WordsSCLToken extends SCLToken { - /* Used for WORDS & ARRAY */ - public IList<SCLToken> tokenVals; +public class WordsSCLToken extends WordListSCLToken { - public WordsSCLToken(boolean isArray, IList<SCLToken> tokens) { - if(isArray) { - type = Type.ARRAY; - } else { - type = Type.WORDS; - } - - tokenVals = tokens; + public WordsSCLToken(IList<SCLToken> tokens) { + super(false, tokens); + } + + @Override + public String toString() { + return "WordsSCLToken [tokenVals=" + tokenVals + "]"; } } |
