diff options
| author | EVE <EVE@EVE-PC> | 2017-03-13 16:41:45 -0400 |
|---|---|---|
| committer | EVE <EVE@EVE-PC> | 2017-03-13 16:41:45 -0400 |
| commit | 01136c6796e21f023713e026674576d8e623462d (patch) | |
| tree | e77886fe0e0adaf3c0430fba9ce248ef83f74fe4 /dice-lang/src/bjc/dicelang/scl | |
| parent | 870d769cfc152171d27b2331a7c590d0b307ad48 (diff) | |
Formatting
Diffstat (limited to 'dice-lang/src/bjc/dicelang/scl')
| -rw-r--r-- | dice-lang/src/bjc/dicelang/scl/StreamControlEngine.java | 212 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/scl/StreamEngine.java | 54 |
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); |
