summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements/vars
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/vars')
-rw-r--r--src/main/java/bjc/rgens/parser/elements/vars/RRefVariableElement.java5
-rw-r--r--src/main/java/bjc/rgens/parser/elements/vars/VariableElement.java15
2 files changed, 16 insertions, 4 deletions
diff --git a/src/main/java/bjc/rgens/parser/elements/vars/RRefVariableElement.java b/src/main/java/bjc/rgens/parser/elements/vars/RRefVariableElement.java
index d731d64..5c0a768 100644
--- a/src/main/java/bjc/rgens/parser/elements/vars/RRefVariableElement.java
+++ b/src/main/java/bjc/rgens/parser/elements/vars/RRefVariableElement.java
@@ -16,6 +16,9 @@ public class RRefVariableElement extends VariableElement {
public void generate(GenerationState state) {
Rule rl = state.findRule(value, true);
+ if(rl == null)
+ throw new GrammarException(String.format("Could not find rule '%s'", value));
+
GenerationState newState = state.newBuf();
rl.generate(newState);
@@ -23,7 +26,7 @@ public class RRefVariableElement extends VariableElement {
String res = newState.contents.toString();
if(forbidSpaces && res.contains(" ")) {
- throw new GrammarException("Spaces not allowed in this context (rule-reference %s)");
+ throw new GrammarException(String.format("Spaces not allowed in this context (rule-reference %s)", state));
}
state.contents.append(res);
diff --git a/src/main/java/bjc/rgens/parser/elements/vars/VariableElement.java b/src/main/java/bjc/rgens/parser/elements/vars/VariableElement.java
index 19c1e2c..2193b3c 100644
--- a/src/main/java/bjc/rgens/parser/elements/vars/VariableElement.java
+++ b/src/main/java/bjc/rgens/parser/elements/vars/VariableElement.java
@@ -36,7 +36,12 @@ public abstract class VariableElement {
VariableElement prevElement = null;
- for (String part : parts) {
+ for (String npart : parts) {
+ // @HACK
+ // This is so that inline refs to hypenized rule names
+ // work. Not sure this is a good impl. strategy
+ String part = npart.replaceAll("\\(|\\)", "");
+
VariableElement elm = null;
if(part.startsWith("$")) {
@@ -47,7 +52,7 @@ public abstract class VariableElement {
elm = new ARefVariableElement(part.substring(1));
} else if (part.startsWith("%")) {
- elm = new RRefVariableElement(forbidSpaces, part.substring(1));
+ elm = new RRefVariableElement(forbidSpaces, String.format("[%s]", part.substring(1)));
} else if (part.startsWith("/")) {
throw new GrammarException("Template variables aren't implemented yet");
} else {
@@ -55,7 +60,11 @@ public abstract class VariableElement {
/* Aggregate chain literals together */
((LiteralVariableElement)prevElement).val += part;
} else {
- elm = new LiteralVariableElement(forbidSpaces, part);
+ if(part.contains(" ")) {
+ elm = new LiteralVariableElement(false, part);
+ } else {
+ elm = new LiteralVariableElement(true, part);
+ }
}
}