checkpoint
[sbp.git] / src / edu / berkeley / sbp / meta / MetaGrammar.java
index 0e8968f..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);
         }
             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";
         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");
 
 
         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");
 
         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());
         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");
 
         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();
 
         public boolean isCompatible(Production p) {
             bind.as t = getBindAs();
+            bind b = getBind();
+
             if (t != null &&
             if (t != null &&
-                (t.value().equals(p.tag) ||
-                 (t.value().equals("") && getName().equals(p.tag))))
+                (t.value().equals(p.tag)))
                 return buildSequence(p)!=null;
 
                 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;
 
             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;
                 return buildSequence(p)!=null;
-
             if (b != null && getName().equals(p.nonTerminal))
                 return buildSequence(p)!=null;
 
             if (b != null && getName().equals(p.nonTerminal))
                 return buildSequence(p)!=null;
 
@@ -230,30 +212,14 @@ public class MetaGrammar {
 
 
     public static Union cached = null;
 
 
     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();
         MetaGrammarBindings.Grammar g = (MetaGrammarBindings.Grammar)red.invoke(t.children());
         Context cx = new Context(g,rm);
         Union u = null;
     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();
         MetaGrammarBindings.Grammar g = (MetaGrammarBindings.Grammar)red.invoke(t.children());
         Context cx = new Context(g,rm);
         Union u = null;
-        for(MetaGrammarBindings.NonTerminal nt : g.nonterminals) {
+        for(MetaGrammarBindings.NonTerminal nt : g.values()) {
             Union el = (Union)cx.get(nt.name);
             StringBuffer st = new StringBuffer();
             el.toString(st);
             Union el = (Union)cx.get(nt.name);
             StringBuffer st = new StringBuffer();
             el.toString(st);
@@ -275,7 +241,7 @@ public class MetaGrammar {
         }
         public Union build() {
             Union ret = null;
         }
         public Union build() {
             Union ret = null;
-            for(MetaGrammarBindings.NonTerminal nt : grammar.nonterminals) {
+            for(MetaGrammarBindings.NonTerminal nt : grammar.values()) {
                 Union u = get(nt.name);
                 if ("s".equals(nt.name))
                     ret = u;
                 Union u = get(nt.name);
                 if ("s".equals(nt.name))
                     ret = u;