X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=5a055c96cbc86783fac343f0b611bb8e53540dd4;hp=acda0119f3cc1e47ea1b82245837284c60a1e6f6;hb=0632bba5da482b2c39e6959e449259bd6725c213;hpb=a7ba8d8a5f0cb7fbb5bf67f1a95f1cad5226c507
diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java
index acda011..5a055c9 100644
--- a/src/edu/berkeley/sbp/meta/MetaGrammar.java
+++ b/src/edu/berkeley/sbp/meta/MetaGrammar.java
@@ -10,7 +10,15 @@ 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 Grammar.create(MetaGrammar.meta,
+ "s",
+ new AnnotationGrammarBindingResolver(MetaGrammarBindings.class));
+ }
+
+ /** 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 +40,10 @@ 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");
+ Tree t = MetaGrammar.meta;
+ Union u = Grammar.create(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());
t.toJava(out);
out.append("\n // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED\n");
@@ -53,166 +58,730 @@ public class MetaGrammar {
os.close();
}
+ static final Tree meta;
-
- public static class Production {
- public String tag;
- public String nonTerminal;
- public boolean[] drops;
- public Element[] elements;
- public int count = 0;
- public Production(String tag, String nonTerminal, Element[] elements, boolean[] drops) {
- this.tag = tag;
- this.elements = elements;
- this.nonTerminal = nonTerminal;
- this.drops = drops;
- for(int i=0; i, ToJava {
- private int[] map;
- private Bindable _bindable;
- private boolean _israw;
-
- public void toJava(StringBuffer sb) {
- sb.append("new MetaGrammar.TargetReducer(new int[] {");
- for(int i=0; i> t) {
- if (_israw) return _bindable.impose(new Object[] { t });
- ArrayList ret = new ArrayList();
- for(Tree tc : t) {
- if (tc.head() != null && tc.head() instanceof Functor)
- ret.add(((Tree.TreeFunctor