diff options
Diffstat (limited to 'dice-lang/src')
| -rw-r--r-- | dice-lang/src/bjc/dicelang/BindingDiceExpression.java | 16 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/ComplexDice.java | 17 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/CompoundDice.java | 50 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/DiceExpressionBuilder.java | 2 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/DiceExpressionParser.java | 30 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/DiceExpressionType.java | 7 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/Die.java | 14 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/IDiceExpression.java | 9 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/OperatorDiceExpression.java | 60 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/ReferenceDiceExpression.java | 38 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/ScalarDie.java | 14 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/ast/nodes/ILiteralDiceNode.java | 8 | ||||
| -rw-r--r-- | dice-lang/src/bjc/dicelang/ast/nodes/OperatorDiceNode.java | 5 |
13 files changed, 103 insertions, 167 deletions
diff --git a/dice-lang/src/bjc/dicelang/BindingDiceExpression.java b/dice-lang/src/bjc/dicelang/BindingDiceExpression.java index 6a030e3..f41c364 100644 --- a/dice-lang/src/bjc/dicelang/BindingDiceExpression.java +++ b/dice-lang/src/bjc/dicelang/BindingDiceExpression.java @@ -10,15 +10,15 @@ import java.util.Map; * */ public class BindingDiceExpression implements IDiceExpression { - /** + /* * The expression being bound to a name */ private IDiceExpression expression; - /** + /* * The name to bind the expression to */ - private String variableName; + private String name; /** * Create a new dice expression binder from two expressions and an @@ -38,8 +38,8 @@ public class BindingDiceExpression implements IDiceExpression { if (!(left instanceof ReferenceDiceExpression)) { throw new UnsupportedOperationException( "Error: Binding an expression to something that is not a variable reference," - + " or array thereof. is unsupported." - + " Problematic expression is " + left); + + " or array thereof. is unsupported." + + " Problematic expression is " + left); } String varName = ((ReferenceDiceExpression) left).getName(); @@ -64,7 +64,7 @@ public class BindingDiceExpression implements IDiceExpression { private void initialize(String name, IDiceExpression expr, Map<String, IDiceExpression> enviroment) { - this.variableName = name; + this.name = name; this.expression = expr; enviroment.put(name, expr); @@ -87,7 +87,7 @@ public class BindingDiceExpression implements IDiceExpression { */ @Override public String toString() { - return "assign[n=" + variableName + ", exp=" - + expression.toString() + "]"; + return "assign[n=" + name + ", exp=" + + expression.toString() + "]"; } } diff --git a/dice-lang/src/bjc/dicelang/ComplexDice.java b/dice-lang/src/bjc/dicelang/ComplexDice.java index 9bf191f..a21900a 100644 --- a/dice-lang/src/bjc/dicelang/ComplexDice.java +++ b/dice-lang/src/bjc/dicelang/ComplexDice.java @@ -21,6 +21,7 @@ public class ComplexDice implements IDiceExpression { if (!expression.contains("d")) { return new Die(Integer.parseInt(expression)); } + // Split it on the dice type marker String[] strangs = expression.split("d"); @@ -42,12 +43,12 @@ public class ComplexDice implements IDiceExpression { } } - /** + /* * The die being rolled */ private IDiceExpression die; - /** + /* * The number of the particular die to roll */ private IDiceExpression nDice; @@ -101,11 +102,6 @@ public class ComplexDice implements IDiceExpression { return nDice.optimize(); } - /* - * (non-Javadoc) - * - * @see bjc.utils.dice.IDiceExpression#roll() - */ @Override public int roll() { int res = 0; @@ -129,11 +125,6 @@ public class ComplexDice implements IDiceExpression { return res; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { // Print simple dice groups in a much clearer manner @@ -144,4 +135,4 @@ public class ComplexDice implements IDiceExpression { return "complex[n=" + nDice.toString() + ", d=" + die.toString() + "]"; } -}
\ No newline at end of file +} diff --git a/dice-lang/src/bjc/dicelang/CompoundDice.java b/dice-lang/src/bjc/dicelang/CompoundDice.java index 704e4cd..497f9b2 100644 --- a/dice-lang/src/bjc/dicelang/CompoundDice.java +++ b/dice-lang/src/bjc/dicelang/CompoundDice.java @@ -10,40 +10,40 @@ package bjc.dicelang; * */ public class CompoundDice implements IDiceExpression { - /** + /* * The left die of the expression */ - private IDiceExpression leftDice; + private IDiceExpression left; - /** + /* * The right die of the expression */ - private IDiceExpression rightDice; + private IDiceExpression right; /** * Create a new compound dice using the specified dice * - * @param left + * @param lft * The die to use on the left - * @param right + * @param rght * The die to use on the right */ - public CompoundDice(IDiceExpression left, IDiceExpression right) { - this.leftDice = left; - this.rightDice = right; + public CompoundDice(IDiceExpression lft, IDiceExpression rght) { + this.left = lft; + this.right = rght; } /** * Create a new compound dice from two dice strings * - * @param leftExp + * @param lft * The left side dice as a string - * @param rightExp + * @param rght * The right side dice as a string */ - public CompoundDice(String leftExp, String rightExp) { - this(ComplexDice.fromString(leftExp), - ComplexDice.fromString(rightExp)); + public CompoundDice(String lft, String rght) { + this(ComplexDice.fromString(lft), + ComplexDice.fromString(rght)); } /** @@ -58,7 +58,7 @@ public class CompoundDice implements IDiceExpression { @Override public boolean canOptimize() { - return leftDice.canOptimize() && rightDice.canOptimize(); + return left.canOptimize() && right.canOptimize(); } @Override @@ -71,30 +71,20 @@ public class CompoundDice implements IDiceExpression { } return Integer - .parseInt(leftDice.optimize() + "" + rightDice.optimize()); + .parseInt(left.optimize() + "" + right.optimize()); } - /* - * (non-Javadoc) - * - * @see bjc.utils.dice.IDiceExpression#roll() - */ @Override public int roll() { /* * Make the combination of the two dice */ - return Integer.parseInt(leftDice.roll() + "" + rightDice.roll()); + return Integer.parseInt(left.roll() + "" + right.roll()); } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { - return "compound[l=" + leftDice.toString() + ", r=" - + rightDice.toString() + "]"; + return "compound[l=" + left.toString() + ", r=" + + right.toString() + "]"; } -}
\ No newline at end of file +} diff --git a/dice-lang/src/bjc/dicelang/DiceExpressionBuilder.java b/dice-lang/src/bjc/dicelang/DiceExpressionBuilder.java index af856a6..7e42ad4 100644 --- a/dice-lang/src/bjc/dicelang/DiceExpressionBuilder.java +++ b/dice-lang/src/bjc/dicelang/DiceExpressionBuilder.java @@ -12,7 +12,7 @@ import static bjc.dicelang.DiceExpressionType.SUBTRACT; * */ public class DiceExpressionBuilder { - /** + /* * The dice expression we are building */ private IDiceExpression baking; diff --git a/dice-lang/src/bjc/dicelang/DiceExpressionParser.java b/dice-lang/src/bjc/dicelang/DiceExpressionParser.java index 8a1552a..6e15e63 100644 --- a/dice-lang/src/bjc/dicelang/DiceExpressionParser.java +++ b/dice-lang/src/bjc/dicelang/DiceExpressionParser.java @@ -89,51 +89,51 @@ public class DiceExpressionParser { /* * Apply an operation to two dice */ - IDiceExpression rightExpression = expressions + IDiceExpression right = expressions .pop(); - IDiceExpression leftExpression = expressions.pop(); + IDiceExpression left = expressions.pop(); switch (expressionPart) { case ":=": expressions.push(new BindingDiceExpression( - leftExpression, rightExpression, + left, right, enviroment)); break; case "+": expressions .push(new OperatorDiceExpression( - rightExpression, - leftExpression, + right, + left, DiceExpressionType.ADD)); break; case "-": expressions .push(new OperatorDiceExpression( - rightExpression, - leftExpression, + right, + left, DiceExpressionType.SUBTRACT)); break; case "*": expressions .push(new OperatorDiceExpression( - rightExpression, - leftExpression, + right, + left, DiceExpressionType.MULTIPLY)); break; case "/": expressions .push(new OperatorDiceExpression( - rightExpression, - leftExpression, + right, + left, DiceExpressionType.DIVIDE)); break; case "c": expressions.push(new CompoundDice( - leftExpression, rightExpression)); + left, right)); break; case "d": expressions.push(new ComplexDice( - leftExpression, rightExpression)); + left, right)); break; default: /* @@ -141,8 +141,8 @@ public class DiceExpressionParser { * * Make sure to restore popped variables */ - expressions.push(leftExpression); - expressions.push(rightExpression); + expressions.push(left); + expressions.push(right); expressions .push(new ReferenceDiceExpression( diff --git a/dice-lang/src/bjc/dicelang/DiceExpressionType.java b/dice-lang/src/bjc/dicelang/DiceExpressionType.java index 296d751..aaa8543 100644 --- a/dice-lang/src/bjc/dicelang/DiceExpressionType.java +++ b/dice-lang/src/bjc/dicelang/DiceExpressionType.java @@ -24,11 +24,6 @@ public enum DiceExpressionType { */ SUBTRACT; - /* - * (non-Javadoc) - * - * @see java.lang.Enum#toString() - */ @Override public String toString() { switch (this) { @@ -46,4 +41,4 @@ public enum DiceExpressionType { + this + ". WAT"); } }; -}
\ No newline at end of file +} diff --git a/dice-lang/src/bjc/dicelang/Die.java b/dice-lang/src/bjc/dicelang/Die.java index 192daaa..89b085b 100644 --- a/dice-lang/src/bjc/dicelang/Die.java +++ b/dice-lang/src/bjc/dicelang/Die.java @@ -9,12 +9,12 @@ import java.util.Random; * */ public class Die implements IDiceExpression { - /** + /* * Random # gen to use for dice */ private static Random rng = new Random(); - /** + /* * Number of sides this die has */ private int nSides; @@ -49,21 +49,11 @@ public class Die implements IDiceExpression { return 1; } - /* - * (non-Javadoc) - * - * @see bjc.utils.dice.IDiceExpression#roll() - */ @Override public int roll() { return rng.nextInt(nSides) + 1; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "d" + nSides; diff --git a/dice-lang/src/bjc/dicelang/IDiceExpression.java b/dice-lang/src/bjc/dicelang/IDiceExpression.java index acb1d4d..9d29960 100644 --- a/dice-lang/src/bjc/dicelang/IDiceExpression.java +++ b/dice-lang/src/bjc/dicelang/IDiceExpression.java @@ -33,6 +33,8 @@ public interface IDiceExpression { static IDiceExpression toExpression(String expression) { String literalData = expression; + String diceMatcher = "\\Ad\\d+\\Z"; + if (StringUtils.containsInfixOperator(literalData, "c")) { // Parse a compound die String[] strangs = literalData.split("c"); @@ -41,7 +43,7 @@ public interface IDiceExpression { } else if (StringUtils.containsInfixOperator(literalData, "d")) { // Handle groups of similiar dice return ComplexDice.fromString(literalData); - } else if (literalData.matches("\\Ad\\d+\\Z")) { + } else if (literalData.matches(diceMatcher)) { // Handle people who put 'd6' instead of '1d6' return new Die(Integer.parseInt(literalData.substring(1))); } else { @@ -50,7 +52,8 @@ public interface IDiceExpression { return new ScalarDie(Integer.parseInt(literalData)); } catch (NumberFormatException nfex) { UnsupportedOperationException usex = new UnsupportedOperationException( - "Found malformed leaf token " + expression); + "Found malformed leaf token " + expression + ". Floating point numbers " + + "are not supported."); usex.initCause(nfex); @@ -88,4 +91,4 @@ public interface IDiceExpression { * @return The result of rowing the dice */ public int roll(); -}
\ No newline at end of file +} diff --git a/dice-lang/src/bjc/dicelang/OperatorDiceExpression.java b/dice-lang/src/bjc/dicelang/OperatorDiceExpression.java index f86773d..63bf548 100644 --- a/dice-lang/src/bjc/dicelang/OperatorDiceExpression.java +++ b/dice-lang/src/bjc/dicelang/OperatorDiceExpression.java @@ -7,55 +7,50 @@ package bjc.dicelang; * */ public class OperatorDiceExpression implements IDiceExpression { - /** + /* * The operator to use for combining the dice */ - private DiceExpressionType expressionType; + private DiceExpressionType type; - /** + /* * The dice on the left side of the expression */ - private IDiceExpression leftExpression; + private IDiceExpression left; - /** + /* * The dice on the right side of the expression */ - private IDiceExpression rightExpression; + private IDiceExpression right; /** * Create a new compound expression using the specified parameters * - * @param right + * @param rght * The die on the right side of the expression - * @param left + * @param lft * The die on the left side of the expression * @param type * The operator to use for combining the dices */ - public OperatorDiceExpression(IDiceExpression right, - IDiceExpression left, DiceExpressionType type) { - this.rightExpression = right; - this.leftExpression = left; - this.expressionType = type; + public OperatorDiceExpression(IDiceExpression rght, + IDiceExpression lft, DiceExpressionType type) { + this.right = rght; + this.left = lft; + this.type = type; } - /* - * (non-Javadoc) - * - * @see bjc.utils.dice.IDiceExpression#roll() - */ @Override public int roll() { /* * Handle each operator */ - switch (expressionType) { + switch (type) { case ADD: - return rightExpression.roll() + leftExpression.roll(); + return right.roll() + left.roll(); case SUBTRACT: - return rightExpression.roll() - leftExpression.roll(); + return right.roll() - left.roll(); case MULTIPLY: - return rightExpression.roll() * leftExpression.roll(); + return right.roll() * left.roll(); case DIVIDE: /* * Round to keep results as integers. We don't really have @@ -63,12 +58,12 @@ public class OperatorDiceExpression implements IDiceExpression { * probability is a pain */ try { - return rightExpression.roll() / leftExpression.roll(); + return right.roll() / left.roll(); } catch (ArithmeticException aex) { UnsupportedOperationException usex = new UnsupportedOperationException( "Attempted to divide by zero." + " Problematic expression is " - + leftExpression); + + left); usex.initCause(aex); @@ -76,21 +71,16 @@ public class OperatorDiceExpression implements IDiceExpression { } default: throw new IllegalArgumentException( - "Got passed a invalid ScalarExpressionType (" - + expressionType + "). WAT"); + "Got passed a invalid ScalarExpressionType (" + + type + "). WAT"); } } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { - return "dice-exp[type=" + expressionType + ", l=" - + leftExpression.toString() + ", r=" - + rightExpression.toString() + "]"; + return "dice-exp[type=" + type + ", l=" + + left.toString() + ", r=" + + right.toString() + "]"; } -}
\ No newline at end of file +} diff --git a/dice-lang/src/bjc/dicelang/ReferenceDiceExpression.java b/dice-lang/src/bjc/dicelang/ReferenceDiceExpression.java index 483545b..7d3c5c2 100644 --- a/dice-lang/src/bjc/dicelang/ReferenceDiceExpression.java +++ b/dice-lang/src/bjc/dicelang/ReferenceDiceExpression.java @@ -10,28 +10,28 @@ import java.util.Map; * */ public class ReferenceDiceExpression implements IDiceExpression { - /** + /* * The enviroment to do variable dereferencing against */ private Map<String, IDiceExpression> enviroment; - /** + /* * The name of the bound variable */ - private String variableName; + private String name; /** * Create a new reference dice expression referring to the given name * in an enviroment * - * @param name + * @param nme * The name of the bound variable * @param env * The enviroment to resolve the variable against */ - public ReferenceDiceExpression(String name, + public ReferenceDiceExpression(String nme, Map<String, IDiceExpression> env) { - this.variableName = name; + this.name = name; this.enviroment = env; } @@ -41,36 +41,26 @@ public class ReferenceDiceExpression implements IDiceExpression { * @return the name of the referenced variable */ public String getName() { - return variableName; + return name; } - /* - * (non-Javadoc) - * - * @see bjc.utils.dice.IDiceExpression#roll() - */ @Override public int roll() { - if (!enviroment.containsKey(variableName)) { + if (!enviroment.containsKey(name)) { throw new UnsupportedOperationException( "Attempted to reference undefined variable " - + variableName); + + name); } - return enviroment.get(variableName).roll(); + return enviroment.get(name).roll(); } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { - if (enviroment.containsKey(variableName)) { - return enviroment.get(variableName).toString(); + if (enviroment.containsKey(name)) { + return enviroment.get(name).toString() + "(bound to " + name + ")"; } - return variableName; + return name + "(unbound)"; } -}
\ No newline at end of file +} diff --git a/dice-lang/src/bjc/dicelang/ScalarDie.java b/dice-lang/src/bjc/dicelang/ScalarDie.java index 8d31d15..a99fb4f 100644 --- a/dice-lang/src/bjc/dicelang/ScalarDie.java +++ b/dice-lang/src/bjc/dicelang/ScalarDie.java @@ -7,7 +7,7 @@ package bjc.dicelang; * */ public class ScalarDie implements IDiceExpression { - /** + /* * The represented number */ private int number; @@ -32,23 +32,13 @@ public class ScalarDie implements IDiceExpression { return number; } - /* - * (non-Javadoc) - * - * @see bjc.utils.dice.IDiceExpression#roll() - */ @Override public int roll() { return number; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return Integer.toString(number); } -}
\ No newline at end of file +} diff --git a/dice-lang/src/bjc/dicelang/ast/nodes/ILiteralDiceNode.java b/dice-lang/src/bjc/dicelang/ast/nodes/ILiteralDiceNode.java index b94bcc8..e37b6da 100644 --- a/dice-lang/src/bjc/dicelang/ast/nodes/ILiteralDiceNode.java +++ b/dice-lang/src/bjc/dicelang/ast/nodes/ILiteralDiceNode.java @@ -16,15 +16,15 @@ public interface ILiteralDiceNode extends IDiceASTNode { * otherwise */ static DiceLiteralType getLiteralType(String tok) { - String diceGroupOrNumber = "[(?:\\d*d\\d+)(?:\\d+)]"; + String diceGroup = "\\d*d\\d+\\"; + + String diceGroupOrNumber = "[(?:" + diceGroup + ")(?:\\d+)]"; if (tok.matches("\\A" + diceGroupOrNumber + "?" + "c" + diceGroupOrNumber + "\\Z")) { return DiceLiteralType.DICE; } - String diceGroup = "\\d*d\\d+\\"; - if (tok.matches("\\A" + diceGroup + "Z")) { return DiceLiteralType.DICE; } @@ -34,6 +34,8 @@ public interface ILiteralDiceNode extends IDiceASTNode { return DiceLiteralType.INTEGER; } catch (@SuppressWarnings("unused") NumberFormatException nfex) { // We don't care about details + // This probably shouldn't return null, but I believe it does so + // because where its called checks that. @FIXME return null; } } diff --git a/dice-lang/src/bjc/dicelang/ast/nodes/OperatorDiceNode.java b/dice-lang/src/bjc/dicelang/ast/nodes/OperatorDiceNode.java index 7c0a29d..b62c15c 100644 --- a/dice-lang/src/bjc/dicelang/ast/nodes/OperatorDiceNode.java +++ b/dice-lang/src/bjc/dicelang/ast/nodes/OperatorDiceNode.java @@ -98,11 +98,6 @@ public enum OperatorDiceNode implements IDiceASTNode { return DiceASTType.OPERATOR; } - /* - * (non-Javadoc) - * - * @see bjc.utils.dice.ast.IDiceASTNode#isOperator() - */ @Override public boolean isOperator() { return true; |
