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/RGrammar.java | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'src/main/java/bjc/rgens/parser/RGrammar.java') diff --git a/src/main/java/bjc/rgens/parser/RGrammar.java b/src/main/java/bjc/rgens/parser/RGrammar.java index 5ca26a4..d523479 100755 --- a/src/main/java/bjc/rgens/parser/RGrammar.java +++ b/src/main/java/bjc/rgens/parser/RGrammar.java @@ -58,7 +58,7 @@ public class RGrammar { /* The rules of the grammar. */ public Map rules; /* The rules imported from other grammars. */ - private Map importRules; + private Map importRules; /* The rules exported from this grammar. */ private Set exportRules; /* The initial rule of this grammar. */ @@ -75,6 +75,10 @@ public class RGrammar { */ public RGrammar(Map ruls) { rules = ruls; + + for(Rule rl : ruls.values()) { + rl.belongsTo = this; + } } /** @@ -86,7 +90,7 @@ public class RGrammar { * @param importedRules * The set of imported rules to use. */ - public void setImportedRules(Map importedRules) { + public void setImportedRules(Map importedRules) { importRules = importedRules; } @@ -131,7 +135,7 @@ public class RGrammar { * @return A possible string from the grammar. */ public String generate(String startRule, Random rnd, Map vars, - Map> rlVars) { + Map rlVars) { return generate(startRule, new GenerationState(new StringBuilder(), rnd, vars, rlVars, this)); } @@ -164,20 +168,13 @@ public class RGrammar { * We don't search imports, so it will always belong to this * grammar. */ - Rule rl = state.findRule(fromRule, false).getRight(); + Rule rl = state.findRule(fromRule, false); + if(rl == null) throw new GrammarException("Could not find rule " + rl.name); - if(rl.doRecur()) { - RuleCase start = rl.getCase(state.rnd); - System.err.printf("\tFINE: Generating %s (from %s in %s)\n", start, fromRule, name); + rl.generate(state); - generateCase(start, state); - - rl.endRecur(); - } else { - throw new RecurLimitException("Rule recurrence limit exceeded"); - } /* * @NOTE * @@ -326,7 +323,7 @@ public class RGrammar { return rules; } - public Map getImportRules() { + public Map getImportRules() { return importRules; } } -- cgit v1.2.3