diff options
Diffstat (limited to 'src/main/java/bjc/rgens/parser/Rule.java')
| -rwxr-xr-x | src/main/java/bjc/rgens/parser/Rule.java | 26 |
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+", "")); + } + } } |
