X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=42d84b965608c079ddeb75225bca29a50e9b49c1;hb=1d5f76f8144b739719737bfe75f321caf67cfa19;hp=a4c620b42a108da9c53416df50309d561296517c;hpb=2bee2b032b0422d212e17082cc4dcbf28cb897ac;p=sbp.git
diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java
index a4c620b..42d84b9 100644
--- a/src/edu/berkeley/sbp/meta/MetaGrammar.java
+++ b/src/edu/berkeley/sbp/meta/MetaGrammar.java
@@ -1,16 +1,23 @@
+// Copyright 2006 all rights reserved; see LICENSE file for BSD-style license
+
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 MetaGrammar {
-
+
+ /** create a grammar corresponding to the SBP metagrammar (meta.g) */
+ public static Union newInstance() {
+ return GrammarBuilder.buildFromAST(MetaGrammar.meta, "s", new File[0]);
+ }
+
+ /** Used to rebuild MetaGrammar.java, and not for much else */
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.err.println("usage: java " + MetaGrammar.class.getName() + " grammarfile.g com.yourdomain.package.ClassName");
@@ -32,13 +39,8 @@ public class MetaGrammar {
out.append("\n // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n");
- Tree t = MetaGrammarTree.meta;
- Union u = MetaGrammar.make(t, "s");
-
- System.err.println();
- System.err.println("== parsing with parsed grammar =================================================================================");
- t = new CharParser((Union)u).parse(new FileInputStream(args[0])).expand1();
- System.out.println(t.toPrettyString());
+ Union u = GrammarBuilder.buildFromAST(MetaGrammar.meta, "s", new File[0]);
+ Tree t = new CharParser((Union)u).parse(new FileInputStream(args[0])).expand1();
t.toJava(out);
out.append("\n // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED\n");
@@ -52,198 +54,849 @@ public class MetaGrammar {
p.flush();
os.close();
}
-
- public static class TreeBindable {
-
- private Bindable _bindable;
- public TreeBindable(Object o) { this(Bindable.create(o)); }
- public TreeBindable(Bindable b) { this._bindable = b; }
-
- private int[] buildSequence(Production p) {
- Annotation[][] annotations = _bindable.getArgAnnotations();
- Class[] types = _bindable.getArgTypes();
- String[] names = _bindable.getArgNames();
- String name = _bindable.getSimpleName();
- int len = annotations.length;
- int ofs = 0;
- bind.arg[] argtags = new bind.arg[len];
- for(int i=0; i0 && types[0]==Input.Region.class;
- for(int i=0; i 0 &&
- _bindable.getArgTypes()[0] == Input.Region.class) {
- Functor func = new Functor() {
- public Object invoke(final Input.Region region) {
- return
- new TreeBindableReducer(buildSequence(p),
- _bindable,
- isRaw()) {
- public Object invoke(Iterable> t) {
- if (_israw) return _bindable.impose(new Object[] { t });
- ArrayList ret = new ArrayList();
- ret.add(region);
- for(Tree tc : t) {
- if (tc.head() != null && tc.head() instanceof Functor)
- ret.add(((Tree.TreeFunctor