diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2016-04-18 13:04:01 -0400 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2016-04-18 13:04:01 -0400 |
| commit | 24f3ce54983348e1aa0229d5c08b3fe99d739d40 (patch) | |
| tree | 948277e2519e2dffcb3fa2b2bf2ee649c21c2e3c /dice-lang/src/examples | |
| parent | 9ce39956fa1702f157c347dc4b8807d9b5dd2185 (diff) | |
Added operation condensing
Diffstat (limited to 'dice-lang/src/examples')
| -rw-r--r-- | dice-lang/src/examples/java/bjc/dicelang/examples/DiceASTLanguageTest.java | 6 | ||||
| -rw-r--r-- | dice-lang/src/examples/java/bjc/dicelang/examples/DiceExpressionPreparer.java | 38 |
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); |
