summaryrefslogtreecommitdiff
path: root/base/src
diff options
context:
space:
mode:
authorstudent <student@localhost>2018-02-12 12:14:27 -0500
committerstudent <student@localhost>2018-02-12 12:14:27 -0500
commita15873fb42e8db3b2101330514b2208ef3490d70 (patch)
tree3883743f9d91363a28e6b7cda3f8fb1bcdb591d2 /base/src
parentc25b68c6b24d86b7d1169ad4ec1e619d79a2b38d (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.java15
-rw-r--r--base/src/bjc/dicelang/scl/SCLToken.java35
-rw-r--r--base/src/bjc/dicelang/scl/StreamControlEngine.java10
-rw-r--r--base/src/bjc/dicelang/scl/StringLitSCLToken.java13
-rw-r--r--base/src/bjc/dicelang/scl/StringSCLToken.java2
-rw-r--r--base/src/bjc/dicelang/scl/SymbolSCLToken.java13
-rw-r--r--base/src/bjc/dicelang/scl/WordListSCLToken.java48
-rw-r--r--base/src/bjc/dicelang/scl/WordSCLToken.java44
-rw-r--r--base/src/bjc/dicelang/scl/WordsSCLToken.java19
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 + "]";
}
}