summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/Rule.java
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-05 22:09:23 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-05 22:09:23 -0300
commit05c9922b30cd0dcd2a452673c2e155215d074b19 (patch)
tree80f2cc1cfd239761f3d74d20159f780c1673781b /src/main/java/bjc/rgens/parser/Rule.java
parentf25d1062a56a81b17348b799e6d4d7e1dc12a1cc (diff)
Templates pt. 3
Templates should now work, though there is no syntax to reference them from rules yet In addition, several internal things have been changed so as to improve code quality
Diffstat (limited to 'src/main/java/bjc/rgens/parser/Rule.java')
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/Rule.java26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/main/java/bjc/rgens/parser/Rule.java b/src/main/java/bjc/rgens/parser/Rule.java
index 06dedac..ac67158 100755
--- a/src/main/java/bjc/rgens/parser/Rule.java
+++ b/src/main/java/bjc/rgens/parser/Rule.java
@@ -13,6 +13,8 @@ import java.util.Random;
* @author EVE
*/
public class Rule {
+ public RGrammar belongsTo;
+
/** The name of this grammar rule. */
public String name;
@@ -83,7 +85,7 @@ public class Rule {
throw new NullPointerException("Case must not be null");
}
- cse.belongsTo = name;
+ cse.belongsTo = this;
cse.debugName = String.format("%s-%d", name, serial);
serial += 1;
@@ -143,7 +145,7 @@ public class Rule {
for(IPair<Integer, RuleCase> cse : cases) {
RuleCase cs = cse.getRight();
- cs.belongsTo = name;
+ cs.belongsTo = this;
cs.debugName = String.format("%s-%d", name, serial);
serial += 1;
@@ -203,6 +205,8 @@ public class Rule {
public Rule exhaust() {
Rule rl = new Rule(name);
+ rl.belongsTo = belongsTo;
+
rl.cases = cases.exhaustible();
rl.prob = prob;
@@ -219,4 +223,22 @@ public class Rule {
return rl;
}
+
+ public void generate(GenerationState state) {
+ state.swapGrammar(belongsTo);
+
+ if(doRecur()) {
+ RuleCase cse = getCase(state.rnd);
+
+ System.err.printf("\tFINE: Generating %s (from %s)\n", cse, belongsTo.name);
+
+ belongsTo.generateCase(cse, state);
+
+ endRecur();
+ }
+
+ if(name.contains("+")) {
+ state.contents = new StringBuilder(state.contents.toString().replaceAll("\\s+", ""));
+ }
+ }
}