summaryrefslogtreecommitdiff
path: root/dice-lang/src/bjc/dicelang/scl
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2017-04-11 21:48:50 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2017-04-11 21:48:50 -0400
commit57f9a3bfdad20bead5b35ee540e8790e80a6b9a4 (patch)
tree1e7184825eaa8d22077b505513df3e0d8502fb39 /dice-lang/src/bjc/dicelang/scl
parent675ae734dd7b7a47d93ee3527dd1eb7195be047b (diff)
Cleanup
Diffstat (limited to 'dice-lang/src/bjc/dicelang/scl')
-rw-r--r--dice-lang/src/bjc/dicelang/scl/StreamControlEngine.java201
-rw-r--r--dice-lang/src/bjc/dicelang/scl/StreamEngine.java68
2 files changed, 149 insertions, 120 deletions
diff --git a/dice-lang/src/bjc/dicelang/scl/StreamControlEngine.java b/dice-lang/src/bjc/dicelang/scl/StreamControlEngine.java
index 76133e7..ac9e880 100644
--- a/dice-lang/src/bjc/dicelang/scl/StreamControlEngine.java
+++ b/dice-lang/src/bjc/dicelang/scl/StreamControlEngine.java
@@ -1,5 +1,40 @@
package bjc.dicelang.scl;
+import static bjc.dicelang.Errors.ErrorKey.EK_SCL_INVARG;
+import static bjc.dicelang.Errors.ErrorKey.EK_SCL_INVTOKEN;
+import static bjc.dicelang.Errors.ErrorKey.EK_SCL_MMQUOTE;
+import static bjc.dicelang.Errors.ErrorKey.EK_SCL_SUNDERFLOW;
+import static bjc.dicelang.Errors.ErrorKey.EK_SCL_UNWORD;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.ARRAY;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.BLIT;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.DELETESTREAM;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.DQUOTE;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.DROP;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.FLIT;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.ILIT;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.LEFTSTREAM;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.MAKEARRAY;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.MAKEEXEC;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.MAKEUNEXEC;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.MERGESTREAM;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.NDROP;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.NEWSTREAM;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.NIP;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.NNIP;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.OBRACE;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.OBRACKET;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.RIGHTSTREAM;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.SLIT;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.SQUOTE;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.STACKCOUNT;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.STACKEMPTY;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.SYMBOL;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.WORD;
+import static bjc.dicelang.scl.StreamControlEngine.Token.Type.WORDS;
+
+import java.util.HashMap;
+import java.util.Map;
+
import bjc.dicelang.Errors;
import bjc.utils.esodata.SimpleStack;
import bjc.utils.esodata.Stack;
@@ -7,12 +42,6 @@ import bjc.utils.funcdata.FunctionalList;
import bjc.utils.funcdata.IList;
import bjc.utils.parserutils.TokenUtils;
-import java.util.HashMap;
-import java.util.Map;
-
-import static bjc.dicelang.Errors.ErrorKey.*;
-import static bjc.dicelang.scl.StreamControlEngine.Token.Type.*;
-
/**
* Runs a Stream Control Language (SCL) program.
*
@@ -80,64 +109,64 @@ public class StreamControlEngine {
*/
public IList<Token> tokenVals;
- public Token(Type typ) {
+ public Token(final Type typ) {
type = typ;
}
- public Token(Type typ, long iVal) {
+ public Token(final Type typ, final long iVal) {
this(typ);
intVal = iVal;
}
- public Token(Type typ, double dVal) {
+ public Token(final Type typ, final double dVal) {
this(typ);
floatVal = dVal;
}
- public Token(Type typ, boolean bVal) {
+ public Token(final Type typ, final boolean bVal) {
this(typ);
boolVal = bVal;
}
- public Token(Type typ, String sVal) {
+ public Token(final Type typ, final String sVal) {
this(typ);
stringVal = sVal;
}
- public Token(Type typ, Token tVal) {
+ public Token(final Type typ, final Token tVal) {
this(typ);
tokenVal = tVal;
}
- public Token(Type typ, Token.Type tVal) {
+ public Token(final Type typ, final Token.Type tVal) {
this(typ, new Token(tVal));
}
- public Token(Type typ, IList<Token> tVals) {
+ public Token(final Type typ, final IList<Token> tVals) {
this(typ);
tokenVals = tVals;
}
- public static Token tokenizeString(String token) {
- if(litTokens.containsKey(token))
+ public static Token tokenizeString(final String token) {
+ if (litTokens.containsKey(token))
return new Token(litTokens.get(token));
- else if(token.startsWith("\\"))
+ else if (token.startsWith("\\"))
return new Token(SYMBOL, token.substring(1));
- else if(builtinWords.containsKey(token))
+ else if (builtinWords.containsKey(token))
return new Token(WORD, builtinWords.get(token));
- else if(token.equals("true"))
+ else if (token.equals("true"))
return new Token(BLIT, true);
- else if(token.equals("false"))
+ else if (token.equals("false"))
return new Token(BLIT, false);
- else if(TokenUtils.isInt(token))
+ else if (TokenUtils.isInt(token))
return new Token(ILIT, Long.parseLong(token));
- else if(TokenUtils.isDouble(token))
+ else if (TokenUtils.isDouble(token))
return new Token(FLIT, Double.parseDouble(token));
else {
Errors.inst.printError(EK_SCL_INVTOKEN, token);
@@ -175,21 +204,21 @@ public class StreamControlEngine {
}
}
- private StreamEngine eng;
+ private final StreamEngine eng;
- private Stack<Token> curStack;
+ private final Stack<Token> curStack;
@SuppressWarnings("unused")
- private Map<String, Token> words;
+ private final Map<String, Token> words;
/**
* Create a new stream control engine.
*
- * @param eng
+ * @param engine
* The engine to control.
*/
- public StreamControlEngine(StreamEngine eng) {
- this.eng = eng;
+ public StreamControlEngine(final StreamEngine engine) {
+ eng = engine;
words = new HashMap<>();
curStack = new SimpleStack<>();
@@ -203,26 +232,26 @@ public class StreamControlEngine {
*
* @return Whether the program executed successfully.
*/
- public boolean runProgram(String[] tokens) {
- for(int i = 0; i < tokens.length; i++) {
- String token = tokens[i];
- Token tok = Token.tokenizeString(token);
+ public boolean runProgram(final String[] tokens) {
+ for (int i = 0; i < tokens.length; i++) {
+ final String token = tokens[i];
+ final Token tok = Token.tokenizeString(token);
- if(tok == null) return false;
+ if (tok == null) return false;
- switch(tok.type) {
+ switch (tok.type) {
case SQUOTE:
i = handleSingleQuote(i, tokens);
- if(i == -1) return false;
+ if (i == -1) return false;
break;
case OBRACKET:
i = handleDelim(i, tokens, "]");
- if(i == -1) return false;
+ if (i == -1) return false;
break;
case OBRACE:
i = handleDelim(i, tokens, "}");
- if(i == -1) return false;
- Token brak = curStack.pop();
+ if (i == -1) return false;
+ final Token brak = curStack.pop();
curStack.push(new Token(ARRAY, brak.tokenVals));
break;
case WORD:
@@ -237,40 +266,40 @@ public class StreamControlEngine {
return true;
}
- private boolean handleWord(Token tk) {
+ private boolean handleWord(final Token tk) {
boolean succ = true;
- switch(tk.tokenVal.type) {
+ switch (tk.tokenVal.type) {
case NEWSTREAM:
eng.newStream();
break;
case LEFTSTREAM:
succ = eng.leftStream();
- if(!succ) return false;
+ if (!succ) return false;
break;
case RIGHTSTREAM:
succ = eng.rightStream();
- if(!succ) return false;
+ if (!succ) return false;
break;
case DELETESTREAM:
succ = eng.deleteStream();
- if(!succ) return false;
+ if (!succ) return false;
break;
case MERGESTREAM:
succ = eng.mergeStream();
- if(!succ) return false;
+ if (!succ) return false;
break;
case MAKEARRAY:
succ = makeArray();
- if(!succ) return false;
+ if (!succ) return false;
break;
case MAKEEXEC:
succ = toggleExec(true);
- if(!succ) return false;
+ if (!succ) return false;
break;
case MAKEUNEXEC:
succ = toggleExec(false);
- if(!succ) return false;
+ if (!succ) return false;
break;
case STACKCOUNT:
curStack.push(new Token(ILIT, curStack.size()));
@@ -279,7 +308,7 @@ public class StreamControlEngine {
curStack.push(new Token(BLIT, curStack.empty()));
break;
case DROP:
- if(curStack.size() == 0) {
+ if (curStack.size() == 0) {
Errors.inst.printError(EK_SCL_SUNDERFLOW, tk.tokenVal.type.toString());
return false;
}
@@ -287,10 +316,10 @@ public class StreamControlEngine {
break;
case NDROP:
succ = handleNDrop();
- if(!succ) return false;
+ if (!succ) return false;
break;
case NIP:
- if(curStack.size() < 2) {
+ if (curStack.size() < 2) {
Errors.inst.printError(EK_SCL_SUNDERFLOW, tk.tokenVal.type.toString());
return false;
}
@@ -299,7 +328,7 @@ public class StreamControlEngine {
break;
case NNIP:
succ = handleNNip();
- if(!succ) return false;
+ if (!succ) return false;
break;
default:
Errors.inst.printError(EK_SCL_UNWORD, tk.tokenVal.type.toString());
@@ -310,16 +339,16 @@ public class StreamControlEngine {
}
private boolean handleNNip() {
- Token num = curStack.pop();
+ final Token num = curStack.pop();
- if(num.type != ILIT) {
+ if (num.type != ILIT) {
Errors.inst.printError(EK_SCL_INVARG, num.type.toString());
return false;
}
- int n = (int) num.intVal;
+ final int n = (int) num.intVal;
- if(curStack.size() < n) {
+ if (curStack.size() < n) {
Errors.inst.printError(EK_SCL_SUNDERFLOW, NNIP.toString());
return false;
}
@@ -329,16 +358,16 @@ public class StreamControlEngine {
}
private boolean handleNDrop() {
- Token num = curStack.pop();
+ final Token num = curStack.pop();
- if(num.type != ILIT) {
+ if (num.type != ILIT) {
Errors.inst.printError(EK_SCL_INVARG, num.type.toString());
return false;
}
- int n = (int) num.intVal;
+ final int n = (int) num.intVal;
- if(curStack.size() < n) {
+ if (curStack.size() < n) {
Errors.inst.printError(EK_SCL_SUNDERFLOW, NDROP.toString());
return false;
}
@@ -347,18 +376,18 @@ public class StreamControlEngine {
return true;
}
- private boolean toggleExec(boolean exec) {
- Token top = curStack.top();
+ private boolean toggleExec(final boolean exec) {
+ final Token top = curStack.top();
- if(exec) {
- if(top.type != ARRAY) {
+ if (exec) {
+ if (top.type != ARRAY) {
Errors.inst.printError(EK_SCL_INVARG, top.toString());
return false;
}
top.type = WORDS;
} else {
- if(top.type != WORDS) {
+ if (top.type != WORDS) {
Errors.inst.printError(EK_SCL_INVARG, top.toString());
return false;
}
@@ -370,15 +399,15 @@ public class StreamControlEngine {
}
private boolean makeArray() {
- Token num = curStack.pop();
+ final Token num = curStack.pop();
- if(num.type != ILIT) {
+ if (num.type != ILIT) {
Errors.inst.printError(EK_SCL_INVARG, num.type.toString());
}
- IList<Token> arr = new FunctionalList<>();
+ final IList<Token> arr = new FunctionalList<>();
- for(int i = 0; i < num.intVal; i++) {
+ for (int i = 0; i < num.intVal; i++) {
arr.add(curStack.pop());
}
@@ -387,34 +416,34 @@ public class StreamControlEngine {
return true;
}
- private int handleDelim(int i, String[] tokens, String delim) {
- IList<Token> toks = new FunctionalList<>();
+ private int handleDelim(final int i, final String[] tokens, final String delim) {
+ final IList<Token> toks = new FunctionalList<>();
int n = i + 1;
- if(n >= tokens.length) {
+ if (n >= tokens.length) {
Errors.inst.printError(EK_SCL_MMQUOTE);
return -1;
}
String tok = tokens[n];
- while(!tok.equals(delim)) {
- Token ntok = Token.tokenizeString(tok);
+ while (!tok.equals(delim)) {
+ final Token ntok = Token.tokenizeString(tok);
- switch(ntok.type) {
+ switch (ntok.type) {
case SQUOTE:
n = handleSingleQuote(n, tokens);
- if(n == -1) return -1;
+ if (n == -1) return -1;
toks.add(curStack.pop());
break;
case OBRACKET:
n = handleDelim(n, tokens, "]");
- if(n == -1) return -1;
+ if (n == -1) return -1;
toks.add(curStack.pop());
break;
case OBRACE:
- i = handleDelim(i, tokens, "}");
- if(i == -1) return -1;
- Token brak = curStack.pop();
+ n = handleDelim(i, tokens, "}");
+ if (n == -1) return -1;
+ final Token brak = curStack.pop();
toks.add(new Token(ARRAY, brak.tokenVals));
break;
default:
@@ -424,7 +453,7 @@ public class StreamControlEngine {
* Move to the next token
*/
n += 1;
- if(n >= tokens.length) {
+ if (n >= tokens.length) {
Errors.inst.printError(EK_SCL_MMQUOTE);
return -1;
}
@@ -441,18 +470,18 @@ public class StreamControlEngine {
return n;
}
- private int handleSingleQuote(int i, String[] tokens) {
- StringBuilder sb = new StringBuilder();
+ private int handleSingleQuote(final int i, final String[] tokens) {
+ final StringBuilder sb = new StringBuilder();
int n = i + 1;
- if(n >= tokens.length) {
+ if (n >= tokens.length) {
Errors.inst.printError(EK_SCL_MMQUOTE);
return -1;
}
String tok = tokens[n];
- while(!tok.equals("'")) {
- if(tok.matches("\\\\+'")) {
+ while (!tok.equals("'")) {
+ if (tok.matches("\\\\+'")) {
/*
* Handle escaped quotes.
*/
@@ -465,7 +494,7 @@ public class StreamControlEngine {
* Move to the next token
*/
n += 1;
- if(n >= tokens.length) {
+ if (n >= tokens.length) {
Errors.inst.printError(EK_SCL_MMQUOTE);
return -1;
}
diff --git a/dice-lang/src/bjc/dicelang/scl/StreamEngine.java b/dice-lang/src/bjc/dicelang/scl/StreamEngine.java
index c79d054..4717eaa 100644
--- a/dice-lang/src/bjc/dicelang/scl/StreamEngine.java
+++ b/dice-lang/src/bjc/dicelang/scl/StreamEngine.java
@@ -1,5 +1,9 @@
package bjc.dicelang.scl;
+import static bjc.dicelang.Errors.ErrorKey.EK_STRM_INVCOM;
+import static bjc.dicelang.Errors.ErrorKey.EK_STRM_LAST;
+import static bjc.dicelang.Errors.ErrorKey.EK_STRM_NONEX;
+
import bjc.dicelang.DiceLangEngine;
import bjc.dicelang.Errors;
import bjc.utils.esodata.SingleTape;
@@ -9,10 +13,6 @@ import bjc.utils.funcdata.FunctionalList;
import bjc.utils.funcdata.IList;
import bjc.utils.funcutils.ListUtils;
-import static bjc.dicelang.Errors.ErrorKey.EK_STRM_INVCOM;
-import static bjc.dicelang.Errors.ErrorKey.EK_STRM_LAST;
-import static bjc.dicelang.Errors.ErrorKey.EK_STRM_NONEX;
-
/**
* Implements multiple interleaved parse streams, as well as a command language
* for the streams.
@@ -42,7 +42,7 @@ public class StreamEngine {
/*
* Handler for SCL programs
*/
- private StreamControlEngine scleng;
+ private final StreamControlEngine scleng;
/**
* Create a new stream engine.
@@ -50,7 +50,7 @@ public class StreamEngine {
* @param engine
* The dice engine we're attached to.
*/
- public StreamEngine(DiceLangEngine engine) {
+ public StreamEngine(final DiceLangEngine engine) {
eng = engine;
savedStreams = new TapeLibrary<>();
@@ -81,7 +81,7 @@ public class StreamEngine {
*
* @return Whether or not the streams were successfully processed.
*/
- public boolean doStreams(String[] toks, IList<String> dest) {
+ public boolean doStreams(final String[] toks, final IList<String> dest) {
/*
* Initialize per-run state.
*/
@@ -95,18 +95,18 @@ public class StreamEngine {
/*
* Process each token.
*/
- for(String tk : toks) {
+ for (final String tk : toks) {
/*
* Process stream commands.
*/
- if(tk.startsWith("{@S") && !quoteMode) {
- if(tk.equals("{@SQ}")) {
+ if (tk.startsWith("{@S") && !quoteMode) {
+ if (tk.equals("{@SQ}")) {
quoteMode = true;
- } else if(!processCommand(tk)) return false;
+ } else if (!processCommand(tk)) return false;
} else {
- if(tk.equals("{@SU}")) {
+ if (tk.equals("{@SU}")) {
quoteMode = false;
- } else if(tk.startsWith("\\") && tk.endsWith("{@SU}")) {
+ } else if (tk.startsWith("\\") && tk.endsWith("{@SU}")) {
currStream.add(tk.substring(1));
} else {
currStream.add(tk);
@@ -114,7 +114,7 @@ public class StreamEngine {
}
}
- for(String tk : currStream) {
+ for (final String tk : currStream) {
dest.add(tk);
}
@@ -134,7 +134,7 @@ public class StreamEngine {
* @return Whether or not the move was successful.
*/
public boolean rightStream() {
- if(!streams.right()) {
+ if (!streams.right()) {
Errors.inst.printError(EK_STRM_NONEX);
return false;
}
@@ -149,7 +149,7 @@ public class StreamEngine {
* @return Whether or not the move was successful.
*/
public boolean leftStream() {
- if(!streams.left()) {
+ if (!streams.left()) {
Errors.inst.printError(EK_STRM_NONEX);
return false;
}
@@ -164,14 +164,14 @@ public class StreamEngine {
* @return Whether or not the delete succeeded.
*/
public boolean deleteStream() {
- if(streams.size() == 1) {
+ if (streams.size() == 1) {
Errors.inst.printError(EK_STRM_LAST);
return false;
- } else {
- streams.remove();
- currStream = streams.item();
}
+ streams.remove();
+ currStream = streams.item();
+
return true;
}
@@ -181,22 +181,22 @@ public class StreamEngine {
* @return Whether or not the merge succeded.
*/
public boolean mergeStream() {
- if(streams.size() == 1) {
+ if (streams.size() == 1) {
Errors.inst.printError(EK_STRM_LAST);
return false;
- } else {
- IList<String> stringLit = streams.remove();
- currStream = streams.item();
- currStream.add(ListUtils.collapseTokens(stringLit, " "));
}
+ final IList<String> stringLit = streams.remove();
+ currStream = streams.item();
+ currStream.add(ListUtils.collapseTokens(stringLit, " "));
+
return true;
}
- private boolean processCommand(String tk) {
+ private boolean processCommand(final String tk) {
char[] comms = null;
- if(tk.length() > 5) {
+ if (tk.length() > 5) {
comms = tk.substring(3, tk.length() - 1).toCharArray();
} else {
comms = new char[1];
@@ -205,30 +205,30 @@ public class StreamEngine {
boolean succ;
- for(char comm : comms) {
- switch(comm) {
+ for (final char comm : comms) {
+ switch (comm) {
case '+':
newStream();
break;
case '>':
succ = rightStream();
- if(!succ) return false;
+ if (!succ) return false;
break;
case '<':
succ = leftStream();
- if(!succ) return false;
+ if (!succ) return false;
break;
case '-':
succ = deleteStream();
- if(!succ) return false;
+ if (!succ) return false;
break;
case 'M':
succ = mergeStream();
- if(!succ) return false;
+ if (!succ) return false;
break;
case 'L':
succ = scleng.runProgram(currStream.toArray(new String[0]));
- if(!succ) return false;
+ if (!succ) return false;
break;
default:
Errors.inst.printError(EK_STRM_INVCOM, tk);