summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-05 15:52:44 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-05 15:52:44 -0300
commitf25d1062a56a81b17348b799e6d4d7e1dc12a1cc (patch)
tree1e2966389381204cf799732742b135fa85fad923 /src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java
parent0164b842d14675b0a28dd143d36923e690e75d27 (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.java31
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);
}
}
}