From f25d1062a56a81b17348b799e6d4d7e1dc12a1cc Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Tue, 5 Jun 2018 15:52:44 -0300 Subject: Templates pt.2 More work that leads towards getting templates working --- .../parser/elements/RuleVariableCaseElement.java | 31 +++++++--------------- 1 file changed, 9 insertions(+), 22 deletions(-) (limited to 'src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java') diff --git a/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java b/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java index d4c677b..fa1783f 100644 --- a/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java @@ -18,35 +18,22 @@ public class RuleVariableCaseElement extends VariableCaseElement { } public void generate(GenerationState state) { - Rule rl; - RGrammar grm; - - if(state.rules.containsKey(varDef)) { - rl = state.rules.get(varDef); - grm = state.gram; - } else if(state.importRules.containsKey(varDef)) { - grm = state.importRules.get(varDef); - rl = grm.getRules().get(varDef); - } else { + IPair par = state.findRule(varDef, true); + + if(par == null) { throw new GrammarException("Can't create variable referencing non-existent rule " + varDef); } - - - if(exhaust) rl = rl.exhaust(); - - if(state.rlVars.containsKey(varName)) { - IPair par = state.rlVars.get(varName); - - System.err.printf("WARN: Shadowing rule variable '%s' (%s with %s)\n", - varName, par.getRight().name, rl.name); + + if(exhaust) { + par = new Pair<>(par.getLeft(), par.getRight().exhaust()); } - state.rlVars.put(varName, new Pair<>(grm, rl)); + state.rlVars.put(varName, par); if(exhaust) { - System.err.printf("\t\tTRACE: Defined exhausted rulevar '%s' ('%s')\n", varName, varDef); + System.err.printf("\t\tFINE: Defined exhausted rulevar '%s' ('%s')\n", varName, varDef); } else { - System.err.printf("\t\tTRACE: Defined rulevar '%s' ('%s')\n", varName, varDef); + System.err.printf("\t\tFINE: Defined rulevar '%s' ('%s')\n", varName, varDef); } } } -- cgit v1.2.3