summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/elements/VariableDefCaseElement.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/parser/elements/VariableDefCaseElement.java')
-rwxr-xr-xsrc/main/java/bjc/rgens/parser/elements/VariableDefCaseElement.java66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/main/java/bjc/rgens/parser/elements/VariableDefCaseElement.java b/src/main/java/bjc/rgens/parser/elements/VariableDefCaseElement.java
new file mode 100755
index 0000000..37a12b6
--- /dev/null
+++ b/src/main/java/bjc/rgens/parser/elements/VariableDefCaseElement.java
@@ -0,0 +1,66 @@
+package bjc.rgens.parser.elements;
+
+import bjc.rgens.parser.GrammarException;
+
+public abstract class VariableDefCaseElement extends CaseElement {
+ /**
+ * The name of the variable this element defines.
+ */
+ public final String varName;
+
+ /**
+ * The definition of the variable this element defines.
+ */
+ public final String varDef;
+
+ public VariableDefCaseElement(String name, String def) {
+ super(false);
+
+ varName = name;
+ varDef = def;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((varDef == null) ? 0 : varDef.hashCode());
+ result = prime * result + ((varName == null) ? 0 : varName.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (!super.equals(obj))
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ VariableDefCaseElement other = (VariableDefCaseElement) obj;
+ if (varDef == null) {
+ if (other.varDef != null)
+ return false;
+ } else if (!varDef.equals(other.varDef))
+ return false;
+ if (varName == null) {
+ if (other.varName != null)
+ return false;
+ } else if (!varName.equals(other.varName))
+ return false;
+ return true;
+ }
+
+ public static CaseElement parseVariable(String varName, String varDef, char op, 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));
+ }
+ }
+}