X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=42d84b965608c079ddeb75225bca29a50e9b49c1;hb=1d5f76f8144b739719737bfe75f321caf67cfa19;hp=78c4b725a47a490bcb3127eeace8858ba96b33c8;hpb=c8a17fdd2e149fe5feecd96c71b7f2cab286ab96;p=sbp.git
diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java
index 78c4b72..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");
@@ -53,179 +55,848 @@ 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; i0 && types[0]==Input.Region.class;
- 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