summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements/vars/ARefVariableElement.java
diff options
context:
space:
mode:
authorBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-07 20:37:51 -0300
committerBenjamin J. Culkin <bjculkin@mix.wvu.edu>2018-06-07 20:37:51 -0300
commit44a8d9d2d56a311293ec86ea40df7126748300a1 (patch)
treecc53c34a97a403ddb4a8d112f09124ee42c4507a /src/main/java/bjc/rgens/parser/elements/vars/ARefVariableElement.java
parent7422af49fa5c4da57323abe676a99468d401c44b (diff)
Refactoring
The main refactoring here is removing the type field from the various classes, but there are a few other smaller ones. This also contains the grounds for a refactoring on variable use
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/vars/ARefVariableElement.java')
-rw-r--r--src/main/java/bjc/rgens/parser/elements/vars/ARefVariableElement.java35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/main/java/bjc/rgens/parser/elements/vars/ARefVariableElement.java b/src/main/java/bjc/rgens/parser/elements/vars/ARefVariableElement.java
new file mode 100644
index 0000000..7a8910c
--- /dev/null
+++ b/src/main/java/bjc/rgens/parser/elements/vars/ARefVariableElement.java
@@ -0,0 +1,35 @@
+package bjc.rgens.parser.elements.vars;
+
+import bjc.rgens.parser.GenerationState;
+import bjc.rgens.parser.GrammarException;
+import bjc.rgens.parser.Rule;
+
+public class ARefVariableElement extends VariableElement {
+ public String value;
+
+ private boolean forbidSpaces;
+
+ public ARefVariableElement(boolean forbidSpaces, String val) {
+ value = val;
+ }
+
+ public void generate(GenerationState state) {
+ if(!state.rlVars.containsKey(value)) {
+ throw new GrammarException("No rule variable named " + value);
+ }
+
+ Rule rl = state.rlVars.get(value);
+
+ GenerationState newState = state.newBuf();
+
+ rl.generate(newState);
+
+ String res = newState.contents.toString();
+
+ if(forbidSpaces && res.contains(" ")) {
+ throw new GrammarException("Spaces not allowed in this context (rule-var %s)");
+ }
+
+ state.contents.append(res);
+ }
+}