summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/GenerationState.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/parser/GenerationState.java')
-rw-r--r--src/main/java/bjc/rgens/parser/GenerationState.java28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/main/java/bjc/rgens/parser/GenerationState.java b/src/main/java/bjc/rgens/parser/GenerationState.java
index ebe7ca4..b147dfd 100644
--- a/src/main/java/bjc/rgens/parser/GenerationState.java
+++ b/src/main/java/bjc/rgens/parser/GenerationState.java
@@ -113,28 +113,44 @@ public class GenerationState {
public void defineVar(String name, String val) {
if(vars.containsKey(name))
- warn("Shadowing variable %s with value %s (old value %s)", name, vars.get(name), val);
+ warn("Shadowing variable %s with value %s (old value %s)",
+ name, val, vars.get(name));
+ else if (gram.autoVars.containsKey(name))
+ warn("Shadowing autovariable %s with value %s (defn. %s)",
+ name, val, gram.autoVars.get(name));
vars.put(name, val);
}
public void defineRuleVar(String name, Rule rle) {
if(rlVars.containsKey(name))
- warn("Shadowing rule variable %s with value %s (old value %s)", name, rlVars.get(name), rle);
+ warn("Shadowing rule variable %s with value %s (old value %s)",
+ name, rlVars.get(name), rle);
+ else if (gram.autoRlVars.containsKey(name))
+ warn("Shadowing rule autovariable %s with value %s (defn. %s)",
+ name, rle, gram.autoRlVars.get(name));
rlVars.put(name, rle);
}
- public String findVar(String name, GenerationState stat) {
+ public String findVar(String name) {
if(!vars.containsKey(name))
- throw new GrammarException(String.format("Variable %s not defined", name));
+ if(gram.autoVars.containsKey(name)) {
+ gram.autoVars.get(name).generate(this);
+ } else {
+ throw new GrammarException(String.format("Variable %s not defined", name));
+ }
return vars.get(name);
}
- public Rule findRuleVar(String name, GenerationState stat) {
+ public Rule findRuleVar(String name) {
if(!rlVars.containsKey(name))
- throw new GrammarException(String.format("Rule variable %s not defined", name));
+ if(gram.autoRlVars.containsKey(name)) {
+ gram.autoRlVars.get(name).generate(this);
+ } else {
+ throw new GrammarException(String.format("Rule variable %s not defined", name));
+ }
return rlVars.get(name);
}