X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=07de45b02164416b43cca5db73d2c36c9b0647fb;hb=60b00d51a5d05ba33ae283577fa5a84899430641;hp=78c654a66ec0751fee256ce97ec82d448beb6a8e;hpb=59eead6bf0f2d9a7abeba03f3fdab04625521faf;p=sbp.git
diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java
index 78c654a..07de45b 100644
--- a/src/edu/berkeley/sbp/meta/MetaGrammar.java
+++ b/src/edu/berkeley/sbp/meta/MetaGrammar.java
@@ -1,16 +1,23 @@
+// Copyright 2006-2007 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 GrammarAST.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 = GrammarAST.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,226 +55,888 @@ public class MetaGrammar {
os.close();
}
+ static final Tree meta;
+
+ static {
+ Tree t = null;
+ try {
+ t =
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 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