summaryrefslogtreecommitdiff
path: root/dice-lang/src
diff options
context:
space:
mode:
Diffstat (limited to 'dice-lang/src')
-rw-r--r--dice-lang/src/bjc/dicelang/BindingDiceExpression.java16
-rw-r--r--dice-lang/src/bjc/dicelang/ComplexDice.java17
-rw-r--r--dice-lang/src/bjc/dicelang/CompoundDice.java50
-rw-r--r--dice-lang/src/bjc/dicelang/DiceExpressionBuilder.java2
-rw-r--r--dice-lang/src/bjc/dicelang/DiceExpressionParser.java30
-rw-r--r--dice-lang/src/bjc/dicelang/DiceExpressionType.java7
-rw-r--r--dice-lang/src/bjc/dicelang/Die.java14
-rw-r--r--dice-lang/src/bjc/dicelang/IDiceExpression.java9
-rw-r--r--dice-lang/src/bjc/dicelang/OperatorDiceExpression.java60
-rw-r--r--dice-lang/src/bjc/dicelang/ReferenceDiceExpression.java38
-rw-r--r--dice-lang/src/bjc/dicelang/ScalarDie.java14
-rw-r--r--dice-lang/src/bjc/dicelang/ast/nodes/ILiteralDiceNode.java8
-rw-r--r--dice-lang/src/bjc/dicelang/ast/nodes/OperatorDiceNode.java5
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;