diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-05 15:52:44 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-06-05 15:52:44 -0300 |
| commit | f25d1062a56a81b17348b799e6d4d7e1dc12a1cc (patch) | |
| tree | 1e2966389381204cf799732742b135fa85fad923 /src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java | |
| parent | 0164b842d14675b0a28dd143d36923e690e75d27 (diff) | |
Templates pt.2
More work that leads towards getting templates working
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java')
| -rw-r--r-- | src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java | 31 |
1 files changed, 9 insertions, 22 deletions
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<RGrammar, Rule> 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<RGrammar, Rule> 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); } } } |
