diff options
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java')
| -rw-r--r-- | src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java b/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java new file mode 100644 index 0000000..29b6fc9 --- /dev/null +++ b/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java @@ -0,0 +1,39 @@ +package bjc.rgens.parser.elements; + +import bjc.utils.data.IPair; +import bjc.utils.data.Pair; + +import bjc.rgens.parser.GrammarException; +import bjc.rgens.parser.GenerationState; +import bjc.rgens.parser.Rule; +import bjc.rgens.parser.RGrammar; + +public class RuleVariableCaseElement extends VariableDefCaseElement { + public final boolean exhaust; + + public RuleVariableCaseElement(String varName, String varDef, boolean exhaust) { + super(varName, varDef); + + this.exhaust = exhaust; + } + + public void generate(GenerationState state) { + Rule rl = state.findRule(varDef, true); + + if(rl == null) { + throw new GrammarException("Can't create variable referencing non-existent rule " + varDef); + } + + if(exhaust) { + rl = rl.exhaust(); + } + + state.rlVars.put(varName, rl); + + if(exhaust) { + System.err.printf("\t\tFINE: Defined exhausted rulevar '%s' ('%s')\n", varName, varDef); + } else { + System.err.printf("\t\tFINE: Defined rulevar '%s' ('%s')\n", varName, varDef); + } + } +} |
