From 24f3ce54983348e1aa0229d5c08b3fe99d739d40 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Mon, 18 Apr 2016 13:04:01 -0400 Subject: Added operation condensing --- .../bjc/dicelang/examples/DiceASTLanguageTest.java | 6 +++- .../dicelang/examples/DiceExpressionPreparer.java | 38 ++++++++++++++-------- 2 files changed, 29 insertions(+), 15 deletions(-) (limited to 'dice-lang/src/examples') 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 optimizedTree = optimizer.optimizeTree(builtAST, enviroment); + ITree condensedTree = + OperationCondenser.condense(optimizedTree); + ITree 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 yard; + private static ShuntingYard 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 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 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 fullyExpandedTokens = ListUtils.deAffixTokens(semiExpandedTokens, ops); -- cgit v1.2.3