diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-05 22:09:23 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-05 22:09:23 -0300 |
| commit | 05c9922b30cd0dcd2a452673c2e155215d074b19 (patch) | |
| tree | 80f2cc1cfd239761f3d74d20159f780c1673781b /src/main/java/bjc/rgens/parser/Rule.java | |
| parent | f25d1062a56a81b17348b799e6d4d7e1dc12a1cc (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-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+", "")); + } + } } |
