diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-07-20 12:51:08 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2018-07-20 12:51:08 -0300 |
| commit | 93884fa70a1fdcef373353639f10cec7aee7cec0 (patch) | |
| tree | 5e74b661938fc4deeff257a17bcc9aff38d656a3 /src/main/java/bjc/rgens/parser/elements/vars | |
| parent | 5a531b2ae8ea61960d2cffc6968d1fb87206941e (diff) | |
Update
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/vars')
| -rw-r--r-- | src/main/java/bjc/rgens/parser/elements/vars/RRefVariableElement.java | 5 | ||||
| -rw-r--r-- | src/main/java/bjc/rgens/parser/elements/vars/VariableElement.java | 15 |
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); + } } } |
