From 93884fa70a1fdcef373353639f10cec7aee7cec0 Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Fri, 20 Jul 2018 12:51:08 -0300 Subject: Update --- .../rgens/parser/elements/vars/RRefVariableElement.java | 5 ++++- .../bjc/rgens/parser/elements/vars/VariableElement.java | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) (limited to 'src/main/java/bjc/rgens/parser/elements/vars') 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); + } } } -- cgit v1.2.3