diff options
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/DependantRuleReference.java')
| -rw-r--r-- | src/main/java/bjc/rgens/parser/elements/DependantRuleReference.java | 48 |
1 files changed, 0 insertions, 48 deletions
diff --git a/src/main/java/bjc/rgens/parser/elements/DependantRuleReference.java b/src/main/java/bjc/rgens/parser/elements/DependantRuleReference.java deleted file mode 100644 index 5eccf8e..0000000 --- a/src/main/java/bjc/rgens/parser/elements/DependantRuleReference.java +++ /dev/null @@ -1,48 +0,0 @@ -package bjc.rgens.parser.elements; - -import bjc.rgens.parser.GrammarException; -import bjc.rgens.parser.GenerationState; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class DependantRuleReference extends RuleCaseElement { - private static Pattern NAMEVAR_PATTERN = Pattern.compile("\\$(\\w+)"); - - public DependantRuleReference(String vl) { - super(vl, ReferenceType.DEPENDENT); - } - - @Override - public void generate(GenerationState state) { - String refBody = val.substring(1, val.length() - 1); - - /* Handle dependent rule names. */ - StringBuffer nameBuffer = new StringBuffer(); - - Matcher nameMatcher = NAMEVAR_PATTERN.matcher(refBody); - - while (nameMatcher.find()) { - String var = nameMatcher.group(1); - - if (!state.vars.containsKey(var)) { - String msg = String.format("No variable '%s' defined", var); - throw new GrammarException(msg); - } - - String name = state.vars.get(var); - - if (name.contains(" ")) { - throw new GrammarException("Variables substituted into names cannot contain spaces"); - } else if (name.equals("")) { - throw new GrammarException("Variables substituted into names cannot be empty"); - } - - nameMatcher.appendReplacement(nameBuffer, name); - } - - nameMatcher.appendTail(nameBuffer); - - doGenerate(String.format("[%s]", nameBuffer.toString()), state); - } -} |
