summaryrefslogtreecommitdiff
path: root/dice-lang/src/examples/java/bjc
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2016-04-18 13:04:01 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2016-04-18 13:04:01 -0400
commit24f3ce54983348e1aa0229d5c08b3fe99d739d40 (patch)
tree948277e2519e2dffcb3fa2b2bf2ee649c21c2e3c /dice-lang/src/examples/java/bjc
parent9ce39956fa1702f157c347dc4b8807d9b5dd2185 (diff)
Added operation condensing
Diffstat (limited to 'dice-lang/src/examples/java/bjc')
-rw-r--r--dice-lang/src/examples/java/bjc/dicelang/examples/DiceASTLanguageTest.java6
-rw-r--r--dice-lang/src/examples/java/bjc/dicelang/examples/DiceExpressionPreparer.java38
2 files changed, 29 insertions, 15 deletions
diff --git a/dice-lang/src/examples/java/bjc/dicelang/examples/DiceASTLanguageTest.java b/dice-lang/src/examples/java/bjc/dicelang/examples/DiceASTLanguageTest.java
index 8d87aee..a6d5c75 100644
--- a/dice-lang/src/examples/java/bjc/dicelang/examples/DiceASTLanguageTest.java
+++ b/dice-lang/src/examples/java/bjc/dicelang/examples/DiceASTLanguageTest.java
@@ -9,6 +9,7 @@ import bjc.dicelang.ast.DiceASTParser;
import bjc.dicelang.ast.DiceASTReferenceSanitizer;
import bjc.dicelang.ast.nodes.IDiceASTNode;
import bjc.dicelang.ast.optimization.ConstantCollapser;
+import bjc.dicelang.ast.optimization.OperationCondenser;
import bjc.utils.funcdata.FunctionalMap;
import bjc.utils.funcdata.FunctionalStringTokenizer;
import bjc.utils.funcdata.IFunctionalList;
@@ -166,8 +167,11 @@ public class DiceASTLanguageTest {
ITree<IDiceASTNode> optimizedTree =
optimizer.optimizeTree(builtAST, enviroment);
+ ITree<IDiceASTNode> condensedTree =
+ OperationCondenser.condense(optimizedTree);
+
ITree<IDiceASTNode> sanitizedTree = DiceASTReferenceSanitizer
- .sanitize(optimizedTree, enviroment);
+ .sanitize(condensedTree, enviroment);
return sanitizedTree;
}
diff --git a/dice-lang/src/examples/java/bjc/dicelang/examples/DiceExpressionPreparer.java b/dice-lang/src/examples/java/bjc/dicelang/examples/DiceExpressionPreparer.java
index 91abf7d..caf7f37 100644
--- a/dice-lang/src/examples/java/bjc/dicelang/examples/DiceExpressionPreparer.java
+++ b/dice-lang/src/examples/java/bjc/dicelang/examples/DiceExpressionPreparer.java
@@ -20,17 +20,31 @@ public class DiceExpressionPreparer {
/**
* The yard to use for shunting expressions
*/
- private static ShuntingYard<String> yard;
+ private static ShuntingYard<String> yard;
+
+ private static final int MATH_PREC = 20;
+ private static final int DICE_PREC = 10;
+ private static final int EXPR_PREC = 0;
static {
- yard = new ShuntingYard<>();
-
- yard.addOp("d", 5); // dice operator: use for creating variable
- // size dice groups
- yard.addOp("c", 6); // compound operator: use for creating compound
- // dice from expressions
- yard.addOp(":=", 0); // binding operator: Bind a name to a variable
- // expression
+ yard = new ShuntingYard<>(false);
+
+ // Basic mathematical operators
+ yard.addOp("+", 0 + MATH_PREC);
+ yard.addOp("-", 0 + MATH_PREC);
+
+ yard.addOp("*", 1 + MATH_PREC);
+ yard.addOp("/", 1 + MATH_PREC);
+
+ yard.addOp("d", 0 + DICE_PREC); // dice operator: use for creating
+ // variable size dice groups
+ yard.addOp("c", 1 + DICE_PREC); // compound operator: use for
+ // creating compound dice from expressions
+
+ yard.addOp("=>", 0 + EXPR_PREC); // let operator: evaluate an
+ // expression in the context of another
+ yard.addOp(":=", 1 + EXPR_PREC); // binding operator: Bind a name
+ // to a variable expression
}
static IFunctionalList<String> prepareCommand(String currentLine) {
@@ -44,6 +58,7 @@ public class DiceExpressionPreparer {
ops.add(new Pair<>("*", "\\*"));
ops.add(new Pair<>("/", "/"));
ops.add(new Pair<>(":=", ":="));
+ ops.add(new Pair<>("=>", "=>"));
IFunctionalList<String> semiExpandedTokens =
ListUtils.splitTokens(tokens, ops);
@@ -52,11 +67,6 @@ public class DiceExpressionPreparer {
ops.add(new Pair<>("(", "\\("));
ops.add(new Pair<>(")", "\\)"));
- ops.add(new Pair<>("+", "\\+"));
- ops.add(new Pair<>("-", "-"));
- ops.add(new Pair<>("*", "\\*"));
- ops.add(new Pair<>("/", "/"));
- ops.add(new Pair<>(":=", ":="));
IFunctionalList<String> fullyExpandedTokens =
ListUtils.deAffixTokens(semiExpandedTokens, ops);