X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=18db16da4402050f3e6aaa025f779a00515041d9;hb=5c4157c1118401c4223ff485e9531fc3ba851be2;hp=2e5fd95dc6a50bcceb5cdad317920eb53b04fab4;hpb=54a6a6e983c3883720b22fe0bef998d309f92097;p=sbp.git
diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java
index 2e5fd95..18db16d 100644
--- a/src/edu/berkeley/sbp/meta/MetaGrammar.java
+++ b/src/edu/berkeley/sbp/meta/MetaGrammar.java
@@ -1,26 +1,28 @@
+// 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 {
-
- public static boolean harsh = true;
+ /** 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");
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";
@@ -37,30 +39,8 @@ public class MetaGrammar {
out.append("\n // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n");
- /*
- ReflectiveMeta m = new ReflectiveMeta();
- 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);
-
- 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();
+ 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");
@@ -75,551 +55,817 @@ public class MetaGrammar {
os.close();
}
- public static class ReflectiveMetaPlain extends ReflectiveMeta {
- public Object repeatTag() { return null; }
- public Sequence tryResolveTag(String tag, String nonTerminalName, Element[] els, Object[] labels, boolean[] drops) {
- return null; }
- public Sequence resolveTag(String tag, String nonTerminalName, Element[] els, Object[] labels, boolean[] drops) {
- return Sequence.rewritingSequence(tag, els, labels, drops);
- }
- }
+ static final Tree meta;
- public static class ReflectiveMeta /*extends MetaGrammar.Meta*/ {
- private final Class _cl;
- private final Class[] _inner;
- public ReflectiveMeta() {
- this(MG.class);
- }
- public ReflectiveMeta(Class c) {
- this._cl = c;
- this._inner = c.getDeclaredClasses();
- }
- public ReflectiveMeta(Class c, Class[] inner) {
- this._cl = c;
- this._inner = inner;
- }
- public Object repeatTag() {
- return new Tree.ArrayBuildingTreeFunctor