summaryrefslogtreecommitdiff
path: root/dice-lang/src/bjc/dicelang/scl
diff options
context:
space:
mode:
authorEVE <EVE@EVE-PC>2017-03-13 16:41:45 -0400
committerEVE <EVE@EVE-PC>2017-03-13 16:41:45 -0400
commit01136c6796e21f023713e026674576d8e623462d (patch)
treee77886fe0e0adaf3c0430fba9ce248ef83f74fe4 /dice-lang/src/bjc/dicelang/scl
parent870d769cfc152171d27b2331a7c590d0b307ad48 (diff)
Formatting
Diffstat (limited to 'dice-lang/src/bjc/dicelang/scl')
-rw-r--r--dice-lang/src/bjc/dicelang/scl/StreamControlEngine.java212
-rw-r--r--dice-lang/src/bjc/dicelang/scl/StreamEngine.java54
2 files changed, 135 insertions, 131 deletions
diff --git a/dice-lang/src/bjc/dicelang/scl/StreamControlEngine.java b/dice-lang/src/bjc/dicelang/scl/StreamControlEngine.java
index 8759c84..8d63be2 100644
--- a/dice-lang/src/bjc/dicelang/scl/StreamControlEngine.java
+++ b/dice-lang/src/bjc/dicelang/scl/StreamControlEngine.java
@@ -24,42 +24,31 @@ public class StreamControlEngine {
static class Token {
public static enum Type {
/*
- * Natural tokens.
- * These come directly from strings
+ * Natural tokens. These come directly from strings
*/
- ILIT, FLIT, BLIT,
- SQUOTE, DQUOTE,
- OBRACKET, OBRACE,
- SYMBOL, WORD,
+ ILIT, FLIT, BLIT, SQUOTE, DQUOTE, OBRACKET, OBRACE, SYMBOL, WORD,
/*
- * Synthetic tokens.
- * These are produced from special tokens.
+ * Synthetic tokens. These are produced from special
+ * tokens.
*/
- SLIT,
- WORDS, ARRAY,
+ SLIT, WORDS, ARRAY,
/*
- * Word tokens
- * These are subordinate to WORD tokens
+ * Word tokens These are subordinate to WORD tokens
*/
/*
* Array manipulation
*/
- MAKEARRAY,
- MAKEEXEC, MAKEUNEXEC,
+ MAKEARRAY, MAKEEXEC, MAKEUNEXEC,
/*
* Stream manipulation
*/
- NEWSTREAM,
- LEFTSTREAM, RIGHTSTREAM,
- DELETESTREAM, MERGESTREAM,
+ NEWSTREAM, LEFTSTREAM, RIGHTSTREAM, DELETESTREAM, MERGESTREAM,
/*
* Stack manipulation
*/
- STACKCOUNT, STACKEMPTY,
- DROP, NDROP,
- NIP, NNIP,
+ STACKCOUNT, STACKEMPTY, DROP, NDROP, NIP, NNIP,
}
/*
@@ -68,35 +57,27 @@ public class StreamControlEngine {
public Type type;
/*
- * Used for
- * ILIT
+ * Used for ILIT
*/
public long intVal;
/*
- * Used for
- * FLIT
+ * Used for FLIT
*/
public double floatVal;
/*
- * Used for
- * BLIT
+ * Used for BLIT
*/
public boolean boolVal;
/*
- * Used for
- * SYMBOL
- * SLIT
+ * Used for SYMBOL SLIT
*/
public String stringVal;
/*
- * Used for
- * WORD
+ * Used for WORD
*/
public Token tokenVal;
/*
- * Used for
- * WORDS
- * ARRAY
+ * Used for WORDS ARRAY
*/
public IList<Token> tokenVals;
@@ -138,7 +119,6 @@ public class StreamControlEngine {
this(typ, new Token(tVal));
}
-
public Token(Type typ, IList<Token> tVals) {
this(typ);
@@ -146,19 +126,19 @@ public class StreamControlEngine {
}
public static Token tokenizeString(String token) {
- if(litTokens.containsKey(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(StringUtils.isInt(token)) {
+ } else if (StringUtils.isInt(token)) {
return new Token(ILIT, Long.parseLong(token));
- } else if(StringUtils.isDouble(token)) {
+ } else if (StringUtils.isDouble(token)) {
return new Token(FLIT, Double.parseDouble(token));
} else {
Errors.inst.printError(EK_SCL_INVTOKEN, token);
@@ -167,32 +147,32 @@ public class StreamControlEngine {
}
private static final Map<String, Token.Type> litTokens;
- private static final Map<String, Token.Type> builtinWords;
+ private static final Map<String, Token.Type> builtinWords;
static {
litTokens = new HashMap<>();
- litTokens.put("'", SQUOTE);
+ litTokens.put("'", SQUOTE);
litTokens.put("\"", DQUOTE);
- litTokens.put("[", OBRACKET);
+ litTokens.put("[", OBRACKET);
litTokens.put("{", OBRACE);
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);
+ 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);
}
}
@@ -205,38 +185,42 @@ public class StreamControlEngine {
public StreamControlEngine(StreamEngine eng) {
this.eng = eng;
- words = new HashMap<>();
+ words = new HashMap<>();
curStack = new SimpleStack<>();
}
/**
* Run a SCL program.
*
- * @param tokens The program to run
+ * @param tokens
+ * The program to run
*
* @return Whether the program executed succesfully
*/
public boolean runProgram(String[] tokens) {
- for(int i = 0; i < tokens.length; i++) {
+ for (int i = 0; i < tokens.length; i++) {
String token = tokens[i];
Token tok = Token.tokenizeString(token);
-
- if(tok == null) {
+
+ 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;
+ if (i == -1)
+ return false;
Token brak = curStack.pop();
curStack.push(new Token(ARRAY, brak.tokenVals));
break;
@@ -255,37 +239,44 @@ public class StreamControlEngine {
private boolean handleWord(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()));
@@ -294,7 +285,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;
}
@@ -302,19 +293,21 @@ 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;
}
-
+
curStack.nip();
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());
@@ -327,14 +320,14 @@ public class StreamControlEngine {
private boolean handleNNip() {
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;
-
- if(curStack.size() < n) {
+ int n = (int) num.intVal;
+
+ if (curStack.size() < n) {
Errors.inst.printError(EK_SCL_SUNDERFLOW, NNIP.toString());
return false;
}
@@ -346,14 +339,14 @@ public class StreamControlEngine {
private boolean handleNDrop() {
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;
-
- if(curStack.size() < n) {
+ int n = (int) num.intVal;
+
+ if (curStack.size() < n) {
Errors.inst.printError(EK_SCL_SUNDERFLOW, NDROP.toString());
return false;
}
@@ -365,15 +358,15 @@ public class StreamControlEngine {
private boolean toggleExec(boolean exec) {
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;
}
@@ -387,13 +380,13 @@ public class StreamControlEngine {
private boolean makeArray() {
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<>();
- for(int i = 0; i < num.intVal; i++) {
+ for (int i = 0; i < num.intVal; i++) {
arr.add(curStack.pop());
}
@@ -405,30 +398,33 @@ public class StreamControlEngine {
private int handleDelim(int i, String[] tokens, String delim) {
IList<Token> toks = new FunctionalList<>();
- int n = i + 1;
- if(n >= tokens.length) {
+ int n = i + 1;
+ if (n >= tokens.length) {
Errors.inst.printError(EK_SCL_MMQUOTE);
return -1;
}
String tok = tokens[n];
- while(!tok.equals(delim)) {
+ while (!tok.equals(delim)) {
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;
+ if (i == -1)
+ return -1;
Token brak = curStack.pop();
toks.add(new Token(ARRAY, brak.tokenVals));
break;
@@ -438,8 +434,8 @@ public class StreamControlEngine {
/*
* Move to the next token
*/
- n += 1;
- if(n >= tokens.length) {
+ n += 1;
+ if (n >= tokens.length) {
Errors.inst.printError(EK_SCL_MMQUOTE);
return -1;
}
@@ -459,15 +455,15 @@ public class StreamControlEngine {
private int handleSingleQuote(int i, String[] tokens) {
StringBuilder sb = new StringBuilder();
- int n = i + 1;
- if(n >= tokens.length) {
+ int n = i + 1;
+ 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.
*/
@@ -479,8 +475,8 @@ public class StreamControlEngine {
/*
* Move to the next token
*/
- n += 1;
- if(n >= tokens.length) {
+ n += 1;
+ 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 65e566d..9bcad9b 100644
--- a/dice-lang/src/bjc/dicelang/scl/StreamEngine.java
+++ b/dice-lang/src/bjc/dicelang/scl/StreamEngine.java
@@ -32,7 +32,7 @@ public class StreamEngine {
* Our streams.
*/
Tape<IList<String>> streams;
- IList<String> currStream;
+ IList<String> currStream;
/*
* Saved streams
@@ -47,7 +47,8 @@ public class StreamEngine {
/**
* Create a new stream engine.
*
- * @param engine The dice engine we're attached to.
+ * @param engine
+ * The dice engine we're attached to.
*/
public StreamEngine(DiceLangEngine engine) {
eng = engine;
@@ -72,8 +73,10 @@ public class StreamEngine {
/**
* Process a possibly interleaved set of streams from toks into dest.
*
- * @param toks The raw token to read streams from.
- * @param dest The list to write the final stream to.
+ * @param toks
+ * The raw token to read streams from.
+ * @param dest
+ * The list to write the final stream to.
*
* @return Whether or not the streams were successfully processed.
*/
@@ -91,23 +94,23 @@ public class StreamEngine {
/*
* Process each token.
*/
- for(String tk : toks) {
+ for (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)) {
+ } else if (!processCommand(tk)) {
return false;
}
/*
* Command ran correctly, continue
*/
} 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);
@@ -115,7 +118,7 @@ public class StreamEngine {
}
}
- for(String tk : currStream) {
+ for (String tk : currStream) {
dest.add(tk);
}
@@ -127,7 +130,7 @@ public class StreamEngine {
}
public boolean rightStream() {
- if(!streams.right()) {
+ if (!streams.right()) {
Errors.inst.printError(EK_STRM_NONEX);
return false;
}
@@ -137,7 +140,7 @@ public class StreamEngine {
}
public boolean leftStream() {
- if(!streams.left()) {
+ if (!streams.left()) {
Errors.inst.printError(EK_STRM_NONEX);
return false;
}
@@ -147,7 +150,7 @@ public class StreamEngine {
}
public boolean deleteStream() {
- if(streams.size() == 1) {
+ if (streams.size() == 1) {
Errors.inst.printError(EK_STRM_LAST);
return false;
} else {
@@ -159,7 +162,7 @@ public class StreamEngine {
}
public boolean mergeStream() {
- if(streams.size() == 1) {
+ if (streams.size() == 1) {
Errors.inst.printError(EK_STRM_LAST);
return false;
} else {
@@ -174,7 +177,7 @@ public class StreamEngine {
private boolean processCommand(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];
@@ -183,30 +186,35 @@ public class StreamEngine {
boolean succ;
- for(char comm : comms) {
- switch(comm) {
+ for (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);