checkpoint
[sbp.git] / src / edu / berkeley / sbp / meta / MetaGrammar.java
index 2077bbd..78c654a 100644 (file)
@@ -16,9 +16,6 @@ public class MetaGrammar {
             System.err.println("usage: java " + MetaGrammar.class.getName() + " grammarfile.g com.yourdomain.package.ClassName");
             System.exit(-1);
         }
-        //StringBuffer sbs = new StringBuffer();
-        //((MetaGrammar)new MetaGrammar().walk(meta)).nt.get("e").toString(sbs);
-        //System.err.println(sbs);
         String className   = args[1].substring(args[1].lastIndexOf('.')+1);
         String packageName = args[1].substring(0, args[1].lastIndexOf('.'));
         String fileName    = packageName.replace('.', '/') + "/" + className + ".java";
@@ -35,15 +32,6 @@ public class MetaGrammar {
 
         out.append("\n        // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n");
 
-        /*
-        GrammarCompiler m = new GrammarCompiler();
-        Tree<String> res = new CharParser(MetaGrammar.make()).parse(new FileInputStream(args[0])).expand1();
-        MetaGrammar.Meta.MetaGrammarFile mgf = m.new MetaGrammarFile(res);
-        MetaGrammar.BuildContext bc = new MetaGrammar.BuildContext(mgf);
-
-        Union meta = mgf.get("s").build(bc);
-        Tree t = new CharParser(meta).parse(new FileInputStream(args[0])).expand1();
-        */
         Tree t = MetaGrammarTree.meta;
         Union u = MetaGrammar.make(t, "s");
 
@@ -51,14 +39,6 @@ public class MetaGrammar {
         System.err.println("== parsing with parsed grammar =================================================================================");
         t = new CharParser((Union)u).parse(new FileInputStream(args[0])).expand1();
         System.out.println(t.toPrettyString());
-        //Forest<String> fs = new CharParser(make()).parse(new FileInputStream(args[0]));
-        //System.out.println(fs.expand1());
-
-        //GraphViz gv = new GraphViz();
-        //fs.toGraphViz(gv);
-        //FileOutputStream fox = new FileOutputStream("out.dot");
-        //gv.dump(fox);
-        //fox.close();
 
         t.toJava(out);
         out.append("\n        // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED\n");
@@ -121,22 +101,24 @@ public class MetaGrammar {
 
         public boolean isCompatible(Production p) {
             bind.as t = getBindAs();
+            bind b = getBind();
+
             if (t != null &&
-                (t.value().equals(p.tag) ||
-                 (t.value().equals("") && getName().equals(p.tag))))
+                (t.value().equals(p.tag)))
                 return buildSequence(p)!=null;
 
-            bind b = getBind();
-            //System.out.println(_bindable.getClass().getSimpleName() + ": " + _bindable.getSimpleName());
+            if (t != null &&
+                ((t.value().equals("") && getName().equals(p.tag))))
+                return buildSequence(p)!=null;
             if (b != null && getName().equals(p.tag))
                 return buildSequence(p)!=null;
 
-            bind.as n = getBindAs();
-            if (n != null &&
-                (n.value().equals(p.nonTerminal) ||
-                 (n.value().equals("") && getName().equals(p.nonTerminal))))
+            if (t != null &&
+                (t.value().equals(p.nonTerminal)))
+                return buildSequence(p)!=null;
+            if (t != null &&
+                ((t.value().equals("") && getName().equals(p.nonTerminal))))
                 return buildSequence(p)!=null;
-
             if (b != null && getName().equals(p.nonTerminal))
                 return buildSequence(p)!=null;
 
@@ -230,23 +212,7 @@ public class MetaGrammar {
 
 
     public static Union cached = null;
-    public static Union make() {
-        /*
-        if (cached != null) return cached;
-        try {
-            GrammarBindingResolver m = new GrammarBindingResolver();
-            Tree<String> res = new CharParser(MetaGrammar.make()).parse(new FileInputStream("tests/meta.g")).expand1();
-            MetaGrammar.Meta.MetaGrammarFile mgf = m.new MetaGrammarFile(res);
-            MetaGrammar.BuildContext bc = new MetaGrammar.BuildContext(mgf);
-            Union meta = mgf.get("s").build(bc);
-            Tree t = new CharParser(meta).parse(new FileInputStream("tests/meta.g")).expand1();
-            return cached = make(t, "s");
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        */
-        return make(MetaGrammarTree.meta, "s");
-    }
+    public static Union make() { return make(MetaGrammarTree.meta, "s"); }
     public static Union make(Tree t, String s) { return make(t, s, new AnnotationGrammarBindingResolver()); }
     public static Union make(Tree t, String s, GrammarBindingResolver rm) {
         Tree.TreeFunctor<Object,Object> red = (Tree.TreeFunctor<Object,Object>)t.head();