diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-19 08:30:45 -0500 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-19 08:30:45 -0500 |
| commit | e03b3f477bcc160b72af4ab09cd8d12081017d2c (patch) | |
| tree | f4e1779c5cf3aa893bd7bdc6c826c64f15648ed9 /dice-lang/src/bjc/dicelang/v2/StreamEngine.java | |
| parent | 03e40ec669ee51c697de64178af6bb662161a8ae (diff) | |
Lots of things, but mostly evaluation
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v2/StreamEngine.java')
| -rw-r--r-- | dice-lang/src/bjc/dicelang/v2/StreamEngine.java | 83 |
1 files changed, 50 insertions, 33 deletions
diff --git a/dice-lang/src/bjc/dicelang/v2/StreamEngine.java b/dice-lang/src/bjc/dicelang/v2/StreamEngine.java index afd4bc1..39bbc0d 100644 --- a/dice-lang/src/bjc/dicelang/v2/StreamEngine.java +++ b/dice-lang/src/bjc/dicelang/v2/StreamEngine.java @@ -11,23 +11,29 @@ public class StreamEngine { private Tape<IList<String>> streams; private IList<String> currStream; - public StreamEngine(DiceLangEngine eng) { + public StreamEngine(DiceLangEngine engine) { + eng = engine; + } + + private void init() { streams = new SingleTape<>(); currStream = new FunctionalList<>(); - streams.append(currStream); + streams.insertBefore(currStream); } public boolean doStreams(String[] toks, IList<String> dest) { + init(); + for(String tk : toks) { - if(tk.startsWith("{@")) { + if(tk.startsWith("{@S")) { if(!processCommand(tk)) return false; } else { currStream.add(tk); } } - for(String tk : currStream.toIterable()) { + for(String tk : currStream) { dest.add(tk); } @@ -35,38 +41,49 @@ public class StreamEngine { } private boolean processCommand(String tk) { - switch(tk.charAt(2)) { - case '+': - streams.add(new FunctionalList<>()); - break; - case '>': - if(!streams.right()) { - System.out.println("\tERROR: Attempted to switch to non-existent stream"); - return false; - } + char[] comms = null; - currStream = streams.item(); - break; - case '<': - if(!streams.left()) { - System.out.println("\tERROR: Attempted to switch to non-existent stream"); - return false; - } + if(tk.length() > 5) { + comms = tk.substring(3, tk.length() - 1).toCharArray(); + } else { + comms = new char[1]; + comms[0] = tk.charAt(3); + } + + for(char comm : comms) { + switch(comm) { + case '+': + streams.insertAfter(new FunctionalList<>()); + break; + case '>': + if(!streams.right()) { + System.out.println("\tERROR: Attempted to switch to non-existent stream"); + return false; + } + + currStream = streams.item(); + break; + case '<': + if(!streams.left()) { + System.out.println("\tERROR: Attempted to switch to non-existent stream"); + return false; + } - currStream = streams.item(); - break; - case '-': - if(streams.size() == 1) { - System.out.println("\tERROR: Cannot delete last stream"); - return false; - } else { - streams.remove(); currStream = streams.item(); - } - break; - default: - System.out.println("\tERROR: Unknown stream control command: " + tk); - return false; + break; + case '-': + if(streams.size() == 1) { + System.out.println("\tERROR: Cannot delete last stream"); + return false; + } else { + streams.remove(); + currStream = streams.item(); + } + break; + default: + System.out.println("\tERROR: Unknown stream control command: " + tk); + return false; + } } return true; |
