summaryrefslogtreecommitdiff
path: root/dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java
diff options
context:
space:
mode:
Diffstat (limited to 'dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java')
-rw-r--r--dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java35
1 files changed, 35 insertions, 0 deletions
diff --git a/dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java b/dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java
index c6aa0a7..16e1761 100644
--- a/dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java
+++ b/dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java
@@ -1,5 +1,7 @@
package bjc.dicelang;
+import bjc.utils.funcutils.StringUtils;
+
/**
* An expression for something that can be rolled like a polyhedral die
*
@@ -37,4 +39,37 @@ public interface IDiceExpression {
public default boolean canOptimize() {
return false;
}
+
+ /**
+ * Parse this node into an expression
+ * @param exp The string to convert to an expression
+ *
+ * @return The node in expression form
+ */
+ static IDiceExpression toExpression(String exp) {
+ String literalData = exp;
+
+ if (StringUtils.containsInfixOperator(literalData, "c")) {
+ String[] strangs = literalData.split("c");
+
+ return new CompoundDice(strangs);
+ } else if (StringUtils.containsInfixOperator(literalData,
+ "d")) {
+ /*
+ * Handle dice groups
+ */
+ return ComplexDice.fromString(literalData);
+ } else {
+ try {
+ return new ScalarDie(Integer.parseInt(literalData));
+ } catch (NumberFormatException nfex) {
+ UnsupportedOperationException usex = new UnsupportedOperationException(
+ "Found malformed leaf token " + exp);
+
+ usex.initCause(nfex);
+
+ throw usex;
+ }
+ }
+ }
} \ No newline at end of file