summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/Rule.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/parser/Rule.java')
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/Rule.java33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/main/java/bjc/rgens/parser/Rule.java b/src/main/java/bjc/rgens/parser/Rule.java
index 4e43fd7..d0e5ec9 100755
--- a/src/main/java/bjc/rgens/parser/Rule.java
+++ b/src/main/java/bjc/rgens/parser/Rule.java
@@ -14,14 +14,30 @@ import java.util.Random;
*/
public class Rule {
/** The name of this grammar rule. */
- public final String name;
+ public String name;
/* The cases for this rule. */
private WeightedRandom<RuleCase> cases;
+ public static enum ProbType {
+ NORMAL,
+ DESCENDING,
+ BINOMIAL
+ }
+
+ public ProbType prob;
+
+ public int descentFactor;
+
+ public int target;
+ public int bound;
+ public int trials;
+
public int recurLimit = 5;
private int currentRecur;
+ private final static Random BASE = new Random();
+
/**
* Create a new grammar rule.
*
@@ -41,6 +57,8 @@ public class Rule {
name = ruleName;
cases = new WeightedRandom<>();
+
+ prob = ProbType.NORMAL;
}
/**
@@ -76,7 +94,7 @@ public class Rule {
* A random case from this rule.
*/
public RuleCase getCase() {
- return cases.generateValue();
+ return getCase(BASE);
}
/**
@@ -89,7 +107,16 @@ public class Rule {
* A random case from this rule.
*/
public RuleCase getCase(Random rnd) {
- return cases.generateValue(rnd);
+ switch(prob) {
+ case DESCENDING:
+ return cases.getDescent(descentFactor, rnd);
+ case BINOMIAL:
+ return cases.getBinomial(target, bound, trials, rnd);
+ case NORMAL:
+ return cases.generateValue(rnd);
+ default:
+ return cases.generateValue(rnd);
+ }
}
/**