From 5fd7a83838f607c3eced0e0b7d97a84f6fb5613e Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Thu, 16 Feb 2017 09:56:40 -0500 Subject: Basic stream commands --- dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java | 38 ++++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) (limited to 'dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java') diff --git a/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java b/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java index 455e5d2..db471c2 100644 --- a/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java +++ b/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java @@ -11,6 +11,7 @@ import bjc.utils.funcutils.ListUtils; import bjc.utils.funcutils.StringUtils; import java.util.Arrays; +import java.util.Comparator; import java.util.Deque; import java.util.List; import java.util.LinkedList; @@ -50,6 +51,8 @@ public class DiceLangEngine { // Are defns sorted by priority private boolean defnsSorted; + private StreamEngine streamEng; + private final int MATH_PREC = 20; private final int DICE_PREC = 10; private final int EXPR_PREC = 0; @@ -98,10 +101,15 @@ public class DiceLangEngine { debugMode = true; postfixMode = false; + + streamEng = new StreamEngine(this); } public void sortDefns() { + Comparator defnCmp = (dfn1, dfn2) -> dfn1.priority - dfn2.priority; + lineDefns.sort(defnCmp); + tokenDefns.sort(defnCmp); defnsSorted = true; } @@ -148,9 +156,25 @@ public class DiceLangEngine { // Sort the defines if they aren't sorted if(!defnsSorted) sortDefns(); + IList streamToks = new FunctionalList<>(); + boolean success = streamEng.doStreams(command.split(" "), streamToks); + if(!success) return false; + + String newComm = ListUtils.collapseTokens(streamToks, " "); + + if(debugMode) + System.out.println("\tCommand after stream commands: " + newComm); + + for(Define dfn : lineDefns.toIterable()) { + newComm = dfn.apply(newComm); + } + + if(debugMode) + System.out.println("\tCommand after line defines: " + newComm); + IMap stringLiterals = new FunctionalMap<>(); - Matcher quoteMatcher = quotePattern.matcher(command); + Matcher quoteMatcher = quotePattern.matcher(newComm); StringBuffer destringedCommand = new StringBuffer(); while(quoteMatcher.find()) { @@ -183,14 +207,20 @@ public class DiceLangEngine { IList semiExpandedTokens = deaffixTokens(tokens, deaffixationList); IList fullyExpandedTokens = deaffixTokens(semiExpandedTokens, opExpansionList); - if(debugMode) { + if(debugMode) System.out.printf("\tCommand after token expansion: " + fullyExpandedTokens.toString() + "\n"); - } + IList lexedTokens = new FunctionalList<>(); for(String token : fullyExpandedTokens.toIterable()) { + String newTok = token; + + for(Define dfn : tokenDefns.toIterable()) { + newTok = dfn.apply(newTok); + } + Token tk = lexToken(token, stringLiterals); if(tk == null) continue; @@ -205,7 +235,7 @@ public class DiceLangEngine { if(!postfixMode) { shuntedTokens = new FunctionalList<>(); - boolean success = shunt.shuntTokens(lexedTokens, shuntedTokens); + success = shunt.shuntTokens(lexedTokens, shuntedTokens); if(!success) return false; } -- cgit v1.2.3