checkpoint
authoradam <adam@megacz.com>
Fri, 14 Jul 2006 03:00:30 +0000 (23:00 -0400)
committeradam <adam@megacz.com>
Fri, 14 Jul 2006 03:00:30 +0000 (23:00 -0400)
darcs-hash:20060714030030-5007d-44fd7803a8fa01867355270b751ec34418112fd2.gz

src/edu/berkeley/sbp/meta/AnnotationGrammarBindings.java [moved from src/edu/berkeley/sbp/meta/AnnotationGrammarBindingResolver.java with 95% similarity]
src/edu/berkeley/sbp/meta/Grammar.java
src/edu/berkeley/sbp/meta/MetaGrammar.java
src/edu/berkeley/sbp/meta/MetaGrammarBindings.java
src/edu/berkeley/sbp/meta/TaggingGrammarBindingResolver.java [deleted file]
src/edu/berkeley/sbp/misc/Demo.java
src/edu/berkeley/sbp/misc/RegressionTests.java
src/edu/berkeley/sbp/tib/TibDoc.java

@@ -10,7 +10,7 @@ import java.lang.reflect.*;
 import java.io.*;
 
 // FIXME: non-static methods
-public class AnnotationGrammarBindingResolver extends Grammar.Bindings {
+public class AnnotationGrammarBindings extends Grammar.Bindings {
 
     private static boolean harsh = true;
 
@@ -18,7 +18,7 @@ public class AnnotationGrammarBindingResolver extends Grammar.Bindings {
     private HashMap<String,Class[]> _inner = new HashMap<String,Class[]>();
     private HashMap<String,Method[]> _allMethods = new HashMap<String,Method[]>();
 
-    public AnnotationGrammarBindingResolver(Class c) {
+    public AnnotationGrammarBindings(Class c) {
         this._cl = c;
         add(c, "");
     }
index 531105e..35429d3 100644 (file)
@@ -12,16 +12,6 @@ import java.io.*;
 public class Grammar {
 
     /**
-     *  Create a grammar from a parse tree.
-     * 
-     *  @param t a tree produced by parsing a grammar using the metagrammar
-     *  @param s the name of the "start symbol"
-     */
-    public static Union create(Tree t, String s) {
-        return create(t, s, new AnnotationGrammarBindingResolver(MetaGrammarBindings.class));
-    }
-
-    /**
      *  Create a grammar from a parse tree and binding resolver
      * 
      *  @param t   a tree produced by parsing a grammar using the metagrammar
@@ -36,7 +26,10 @@ public class Grammar {
 
     public static class Bindings {
         public Object repeatTag()                   { return null; }
-        public Sequence tryResolveTag(Production p) { return null; }
+        public Sequence tryResolveTag(Production p) {
+            if (p.tag==null) return null;
+            return Sequence.rewritingSequence(p.tag, p.elements, p.drops);
+        }
     }
     
 }
index 5a055c9..d5e3036 100644 (file)
@@ -15,7 +15,7 @@ public class MetaGrammar {
     public static Union newInstance() {
         return Grammar.create(MetaGrammar.meta,
                             "s",
-                            new AnnotationGrammarBindingResolver(MetaGrammarBindings.class));
+                            new MetaGrammarBindings());
     }
 
     /** Used to rebuild MetaGrammar.java, and not for much else */
@@ -41,7 +41,7 @@ public class MetaGrammar {
         out.append("\n        // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n");
 
         Tree t = MetaGrammar.meta;
-        Union u = Grammar.create(t, "s");
+        Union u = Grammar.create(t, "s", new MetaGrammarBindings());
 
         t = new CharParser((Union)u).parse(new FileInputStream(args[0])).expand1();
 
index ecde372..ca0a2eb 100644 (file)
@@ -10,7 +10,9 @@ import java.lang.reflect.*;
 import java.io.*;
 
 /** The java classes typically used to represent a parsed grammar AST; each inner class is a type of AST node. */
-public class MetaGrammarBindings {
+public class MetaGrammarBindings extends AnnotationGrammarBindings {
+
+    public MetaGrammarBindings() { super(MetaGrammarBindings.class); }
 
     // FIXME ugly ugly ugly scary dangerous
     public static String prefix = "";
diff --git a/src/edu/berkeley/sbp/meta/TaggingGrammarBindingResolver.java b/src/edu/berkeley/sbp/meta/TaggingGrammarBindingResolver.java
deleted file mode 100644 (file)
index ef1ce3b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-package edu.berkeley.sbp.meta;
-import edu.berkeley.sbp.util.*;
-import edu.berkeley.sbp.*;
-import edu.berkeley.sbp.chr.*;
-import edu.berkeley.sbp.misc.*;
-import edu.berkeley.sbp.bind.*;
-import java.util.*;
-import java.lang.annotation.*;
-import java.lang.reflect.*;
-import java.io.*;
-
-public class TaggingGrammarBindingResolver extends Grammar.Bindings {
-    public Object repeatTag() { return null; }
-    public Sequence tryResolveTag(Production p) {
-        if (p.tag==null) return null;
-        return Sequence.rewritingSequence(p.tag, p.elements, p.drops);
-    }
-}
index a4cc7ff..e8d38ee 100644 (file)
@@ -39,7 +39,7 @@ public class Demo {
 
         Parser metaGrammarParser   = new CharParser(MetaGrammar.newInstance());
         Tree<String> parsedGrammar = metaGrammarParser.parse(new CharInput(new FileInputStream(s[0]))).expand1();
-        Grammar.Bindings gbr = new AnnotationGrammarBindingResolver(Math.class);
+        Grammar.Bindings gbr       = new AnnotationGrammarBindings(Math.class);
         Union   mathGrammar        = Grammar.create(parsedGrammar, "Expr", gbr);
         Parser  mathParser         = new CharParser(mathGrammar);
 
index 9c1290b..d870ae2 100644 (file)
@@ -33,7 +33,7 @@ public class RegressionTests {
 
             System.err.println("parsing " + s[0]);
             Tree<String> res = new CharParser(MetaGrammar.newInstance()).parse(new FileInputStream(s[0])).expand1();
-            Union meta = Grammar.create(res, "s");
+            Union meta = Grammar.create(res, "s", new MetaGrammarBindings());
 
             System.err.println("parsing " + s[1]);
             //SequenceInputStream sis = new SequenceInputStream(new FileInputStream(s[0]), new FileInputStream(s[1]));
@@ -89,7 +89,7 @@ public class RegressionTests {
         }
     }
 
-    public static class TestCaseMaker extends AnnotationGrammarBindingResolver {
+    public static class TestCaseMaker extends AnnotationGrammarBindings {
         public TestCaseMaker() {
             super(TestCaseMakerHelper.class);
             add(MetaGrammarBindings.class, "grammar");
@@ -97,7 +97,7 @@ public class RegressionTests {
         }
         public static class TestCaseMakerHelper {
             public static @bind.as("grammaro") @bind.raw Object grammaro(Iterable<Tree> t) {
-                return Grammar.create(t.iterator().next(), "s", new TaggingGrammarBindingResolver());
+                return Grammar.create(t.iterator().next(), "s", new Grammar.Bindings());
             }
             //public static @bind.as("tca")           Object tca(Object[] o) throws IOException {
             //return new TestCase((String)o[0], (String[])o[1], (Union)o[2], false, false); }
@@ -194,13 +194,13 @@ public class RegressionTests {
     public static class TestCaseBuilder extends StringWalker {
         public Object walk(Tree<String> tree) {
             try {
-                if ("grammaro".equals(tree.head())) return Grammar.create(tree, "s");
+                if ("grammaro".equals(tree.head())) return Grammar.create(tree, "s", new MetaGrammarBindings());
                 else if ("output".equals(tree.head())) return string(tree.children());
                 else if ("input".equals(tree.head())) return string(tree.children());
                 else if ("testcase".equals(tree.head())) {
                     String input = string(tree.child(0));
                     String[] output = tree.numChildren()>2 ? ((String[])walk(tree, 1)) : new String[0];
-                    Union grammar = Grammar.create(tree.child(tree.numChildren()-1), "s");
+                    Union grammar = Grammar.create(tree.child(tree.numChildren()-1), "s", new MetaGrammarBindings());
                     TestCase tc = new TestCase(input, output, grammar, false, false);
                     return tc;
                 } else if ("ts".equals(tree.head())) return walk(tree, 0);
index 42daf15..ee1a861 100644 (file)
@@ -686,7 +686,7 @@ toContex ll = prefix ++ (concatMap tl ll) ++ suffix
 
             Tree<String> res = new CharParser(MetaGrammar.newInstance()).parse(new FileInputStream(s[0])).expand1();
             
-            AnnotationGrammarBindingResolver resolver = new AnnotationGrammarBindingResolver(TD.class);
+            AnnotationGrammarBindings resolver = new AnnotationGrammarBindings(TD.class);
             resolver.add(MetaGrammarBindings.class, "meta");
             Union tibgram = Grammar.create(res, "s", resolver);