]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/parser/regexp/RAtom.java
Moved SCL parser generator to platform repository.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / parser / regexp / RAtom.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/parser/regexp/RAtom.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/parser/regexp/RAtom.java
new file mode 100644 (file)
index 0000000..6faa21a
--- /dev/null
@@ -0,0 +1,55 @@
+package org.simantics.scl.compiler.parser.regexp;
+
+import org.simantics.scl.compiler.parser.regexp.automata.NFA;
+
+public class RAtom extends Regexp {
+    public final int symbolId;
+
+    public RAtom(int symbolId) {
+        this.symbolId = symbolId;
+    }
+
+    @Override
+    protected void buildAutomaton(NFA aut, int inState, int outState) {
+        aut.addTransition(inState, symbolId, outState);
+    }
+
+    @Override
+    protected void toString(StringBuilder b, int prec) {
+        b.append((char)symbolId);
+    }
+
+    @Override
+    public void toString(StringBuilder b, Namer grammar, int prec) {
+        if(symbolId == 0x80000000)
+            b.append("#");
+        else
+            b.append(grammar.getName(symbolId));
+    }
+    
+    @Override
+    protected int getTypeId() {
+        return ATOM;
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        if(obj == this)
+            return true;
+        if(obj == null || obj.getClass() != getClass())
+            return false;
+        RAtom other = (RAtom)obj;
+        return symbolId == other.symbolId;
+    }
+    
+    @Override
+    public int hashCode() {
+        return 31*symbolId + 46;
+    }
+
+    @Override
+    public boolean isNullable() {
+        return false;
+    }
+
+}