X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=f8d9aea44ad7e9541d3c09baeacab9ec32c7bc65;hb=61539aaf02d0537fd1df08b5d5bd03189992cf1e;hp=aa02d5f475633c88e3eb6450b067d936b0789f6e;hpb=92fb8d7453b3caad1471d84dd452f5ec07785e5e;p=sbp.git
diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java
index aa02d5f..f8d9aea 100644
--- a/src/edu/berkeley/sbp/meta/MetaGrammar.java
+++ b/src/edu/berkeley/sbp/meta/MetaGrammar.java
@@ -1,3 +1,5 @@
+// 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.*;
@@ -10,15 +12,18 @@ 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 MetaGrammarBindings());
+ }
+
+ /** 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");
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,30 +40,10 @@ public class MetaGrammar {
out.append("\n // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n");
- /*
- GrammarCompiler m = new GrammarCompiler();
- Tree 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);
+ Tree t = MetaGrammar.meta;
+ Union u = Grammar.create(t, "s", new MetaGrammarBindings());
- 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");
-
- 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());
- //Forest 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");
@@ -73,231 +58,754 @@ public class MetaGrammar {
os.close();
}
+ static final Tree meta;
-
- public static class Production {
- public String tag;
- public String nonTerminal;
- public Object[] labels;
- public boolean[] drops;
- public Element[] elements;
- public int count = 0;
- public Production(String tag, String nonTerminal, Element[] elements, Object[] labels, boolean[] drops) {
- this.tag = tag;
- this.elements = elements;
- this.nonTerminal = nonTerminal;
- this.labels = labels;
- 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