From 05c9922b30cd0dcd2a452673c2e155215d074b19 Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Tue, 5 Jun 2018 22:09:23 -0300 Subject: 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 --- src/main/java/bjc/rgens/parser/Rule.java | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'src/main/java/bjc/rgens/parser/Rule.java') 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 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+", "")); + } + } } -- cgit v1.2.3