summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements/VariableCaseElement.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/VariableCaseElement.java')
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/elements/VariableCaseElement.java15
1 files changed, 15 insertions, 0 deletions
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));
+ }
+ }
}