X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;fp=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=3a6f59d47ed8d5cd90d0705fb66e649b2fa41b57;hp=eacdcf640d6234db688c65266d083bd43c4fb0ab;hb=bad286576656a73e315f0aa7b08a1c1714eb8390;hpb=1a318fea23d4802f8413bff48fe9d26809fb61f9 diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index eacdcf6..3a6f59d 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -10,7 +10,7 @@ import java.io.*; public class MetaGrammar { - public static boolean harsh = false; + public static boolean harsh = true; public static void main(String[] args) throws Exception { if (args.length != 2) { @@ -309,6 +309,7 @@ public class MetaGrammar { } public static Union make(Tree t, String s) { return make(t, s, new ReflectiveMeta()); } public static Union make(Tree t, String s, ReflectiveMeta rm) { + System.out.println("Head: " + t.head()); Tree.TreeFunctor red = (Tree.TreeFunctor)t.head(); MG.Grammar g = (MG.Grammar)red.invoke(t.children()); Context cx = new Context(g,rm); @@ -327,14 +328,21 @@ public class MetaGrammar { public static class MG { - public static @bind.as("grammar") class Grammar { + public static @bind.as Object grammar(Object[] o) { + if (o==null) return null; + if (o[0] != null && o[0] instanceof Grammar) return o[0]; + Grammar g = new Grammar(); + g.nonterminals = (NonTerminal[])Reflection.lub((Object[])o); + return g; + } + public static @bind.as class Grammar { public NonTerminal get(String s) { for(NonTerminal nt : nonterminals) if (nt.name.equals(s)) return nt; return null; } - public @bind.arg("NonTerminal") NonTerminal[] nonterminals; + public @bind.arg NonTerminal[] nonterminals; public String toString() { String ret = "[ "; for(NonTerminal nt : nonterminals) ret += nt + ", "; @@ -365,7 +373,7 @@ public class MetaGrammar { } public static class NonTerminal extends Un { public String name = null; - public @bind.as("=") NonTerminal(@bind.arg("Word") String name, + public @bind.as("NonTerminal") NonTerminal(@bind.arg("Word") String name, @bind.arg("RHS") Seq[][] sequences) { this.name = name; this.sequences = sequences; @@ -473,13 +481,16 @@ public class MetaGrammar { else if (tag!=null) { ret = cx.rm.resolveTag(tag, cx.cnt, els, labels, drops); } else { - int idx = -1; - for(int i=0; i