From e03b3f477bcc160b72af4ab09cd8d12081017d2c Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Sun, 19 Feb 2017 08:30:45 -0500 Subject: Lots of things, but mostly evaluation --- dice-lang/src/bjc/dicelang/v2/StreamEngine.java | 83 +++++++++++++++---------- 1 file changed, 50 insertions(+), 33 deletions(-) (limited to 'dice-lang/src/bjc/dicelang/v2/StreamEngine.java') 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> streams; private IList 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 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; -- cgit v1.2.3