From 05c9922b30cd0dcd2a452673c2e155215d074b19 Mon Sep 17 00:00:00 2001 From: "Benjamin J. Culkin" Date: Tue, 5 Jun 2018 22:09:23 -0300 Subject: Templates pt. 3 Templates should now work, though there is no syntax to reference them from rules yet In addition, several internal things have been changed so as to improve code quality --- .../bjc/rgens/parser/elements/VariableCaseElement.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/main/java/bjc/rgens/parser/elements/VariableCaseElement.java') diff --git a/src/main/java/bjc/rgens/parser/elements/VariableCaseElement.java b/src/main/java/bjc/rgens/parser/elements/VariableCaseElement.java index 63abe16..a2c15a7 100755 --- a/src/main/java/bjc/rgens/parser/elements/VariableCaseElement.java +++ b/src/main/java/bjc/rgens/parser/elements/VariableCaseElement.java @@ -1,5 +1,7 @@ package bjc.rgens.parser.elements; +import bjc.rgens.parser.GrammarException; + public abstract class VariableCaseElement extends CaseElement { public static enum VariableType { NORMAL, @@ -66,4 +68,17 @@ public abstract class VariableCaseElement extends CaseElement { return String.format("{$%s=%s}", varName, varDef); } } + + public static CaseElement parseVariable(String varName, String varDef, boolean colon) { + if(varName.startsWith("$")) { + // Handle normal/expanding variable definitions + if(colon) return new ExpVariableCaseElement(varName.substring(1), varDef); + + return new LitVariableCaseElement(varName.substring(1), varDef); + } else if(varName.startsWith("@")) { + return new RuleVariableCaseElement(varName.substring(1), varDef, colon); + } else { + throw new GrammarException("Unrecognized declaration sigil " + varName.charAt(0)); + } + } } -- cgit v1.2.3