summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java')
-rwxr-xr-x[-rw-r--r--]src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java37
1 files changed, 35 insertions, 2 deletions
diff --git a/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java b/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java
index 30925e2..e58d073 100644..100755
--- a/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java
+++ b/src/main/java/bjc/rgens/parser/elements/ExpVariableCaseElement.java
@@ -1,7 +1,40 @@
package bjc.rgens.parser.elements;
-public class ExpVariableCaseElement extends VariableCaseElement {
+import bjc.utils.data.IPair;
+
+import bjc.rgens.parser.GenerationState;
+import bjc.rgens.parser.GrammarException;
+import bjc.rgens.parser.RecurLimitException;
+import bjc.rgens.parser.RGrammar;
+import bjc.rgens.parser.Rule;
+import bjc.rgens.parser.RuleCase;
+
+public class ExpVariableCaseElement extends VariableDefCaseElement {
public ExpVariableCaseElement(String name, String def) {
- super(name, def, true);
+ super(name, def);
+ }
+
+ @Override
+ public void generate(GenerationState state) {
+ GenerationState newState = state.newBuf();
+
+ Rule rl = state.findRule(varDef, true);
+
+ if(rl != null) {
+ RGrammar destGrammar = rl.belongsTo;
+ newState.swapGrammar(destGrammar);
+ /*
+ * Don't post-process the string, we should only do that
+ * once.
+ */
+ String res = destGrammar.generate(varDef, state, false);
+
+ newState.contents = new StringBuilder(res);
+ } else {
+ String msg = String.format("No rule '%s' defined", varDef);
+ throw new GrammarException(msg);
+ }
+
+ state.vars.put(varName, newState.contents.toString());
}
}