summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements/VariableRuleReference.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/VariableRuleReference.java')
-rw-r--r--src/main/java/bjc/rgens/parser/elements/VariableRuleReference.java31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/main/java/bjc/rgens/parser/elements/VariableRuleReference.java b/src/main/java/bjc/rgens/parser/elements/VariableRuleReference.java
new file mode 100644
index 0000000..bebb9f7
--- /dev/null
+++ b/src/main/java/bjc/rgens/parser/elements/VariableRuleReference.java
@@ -0,0 +1,31 @@
+package bjc.rgens.parser.elements;
+
+import bjc.rgens.parser.GrammarException;
+import bjc.rgens.parser.GenerationState;
+
+public class VariableRuleReference extends RuleCaseElement {
+ public VariableRuleReference(String vl) {
+ super(vl, ReferenceType.VARIABLE);
+ }
+
+ public void generate(GenerationState state) {
+ String refBody = val.substring(1, val.length() - 1);
+
+ /* Handle string references. */
+ if (refBody.equals("$")) {
+ throw new GrammarException("Cannot refer to unnamed variables");
+ }
+
+ String key = refBody.substring(1);
+
+ if (!state.vars.containsKey(key)) {
+ String msg = String.format("No variable '%s' defined", key);
+
+ throw new GrammarException(msg);
+ }
+
+ state.contents.append(state.vars.get(key));
+
+ return;
+ }
+}