checkpoint
[sbp.git] / src / edu / berkeley / sbp / misc / Demo2.java
diff --git a/src/edu/berkeley/sbp/misc/Demo2.java b/src/edu/berkeley/sbp/misc/Demo2.java
new file mode 100644 (file)
index 0000000..fbe0ecf
--- /dev/null
@@ -0,0 +1,43 @@
+package edu.berkeley.sbp.misc;
+
+import edu.berkeley.sbp.*;
+
+public class Demo2 {
+
+    private static Atom atom(char c) {
+        return new edu.berkeley.sbp.chr.CharAtom(c); }
+    private static Atom atom(char c1, char c2) {
+        return new edu.berkeley.sbp.chr.CharAtom(c1, c2); }
+
+    public static void main(String[] s) throws Exception {
+
+        Union expr = new Union("Expr");
+
+        Element[] add   = new Element[] { expr, atom('+'), expr };
+        Element[] mult  = new Element[] { expr, atom('*'), expr };
+        Element[] paren = new Element[] { atom('('), expr, atom(')') };
+        
+        Sequence addSequence = Sequence.create("add", add, null, false);
+        Sequence multSequence = Sequence.create("mult", mult, null, false);
+
+        // uncomment this line to disambiguate
+        multSequence = multSequence.andnot(Sequence.create("add", add, null, false));
+
+        expr.add(Sequence.create(paren, 1));
+        expr.add(addSequence);
+        expr.add(multSequence);
+        expr.add(Sequence.create(atom('0', '9')));
+
+        String input = "8+(1+3)*7";
+
+        System.out.println("input:  \""+input+"\"");
+
+        StringBuffer sb = new StringBuffer();
+        expr.toString(sb);
+        System.out.println("grammar: \n"+sb);
+
+        Forest f = new edu.berkeley.sbp.chr.CharParser(expr).parse(input);
+        System.out.println("output: "+f.expand1().toPrettyString());
+    }
+
+}