summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java')
-rw-r--r--src/main/java/bjc/rgens/parser/elements/RuleVariableCaseElement.java39
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);
+ }
+ }
+}