summaryrefslogtreecommitdiff
path: root/dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java
diff options
context:
space:
mode:
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java')
-rw-r--r--dice-lang/src/bjc/dicelang/v2/DiceLangEngine.java38
1 files changed, 34 insertions, 4 deletions
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<Define> 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<String> 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<String, String> 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<String> semiExpandedTokens = deaffixTokens(tokens, deaffixationList);
IList<String> fullyExpandedTokens = deaffixTokens(semiExpandedTokens, opExpansionList);
- if(debugMode) {
+ if(debugMode)
System.out.printf("\tCommand after token expansion: "
+ fullyExpandedTokens.toString() + "\n");
- }
+
IList<Token> 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;
}