X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FGrammarBuilder.java;h=2b1d7652fb2b87f72a7869137ba781d11b9a106b;hp=d9b04c23dd0d63327530a12fd0b750b3d5b779b5;hb=c2f1ce888172342cfd428355ee01326dd37c36eb;hpb=7dd51387ce4308d3784a1291604203aaf677ba16 diff --git a/src/edu/berkeley/sbp/meta/GrammarBuilder.java b/src/edu/berkeley/sbp/meta/GrammarBuilder.java index d9b04c2..2b1d765 100644 --- a/src/edu/berkeley/sbp/meta/GrammarBuilder.java +++ b/src/edu/berkeley/sbp/meta/GrammarBuilder.java @@ -84,6 +84,7 @@ public class GrammarBuilder { if (head.equals("Elements")) return seq2((ElementNode[])Reflection.rebuild(walkChildren(t), ElementNode[].class)); if (head.equals("NonTerminalReference")) return new ReferenceNode(stringifyChildren(t.child(0))); //if (head.equals(")")) return new ReferenceNode(stringifyChildren(t.child(0))); + if (head.equals("{")) return new XTree((Seq)walk(t.child(0))); if (head.equals("::")) return tag((String)walk(t.child(0)), (Seq)walk(t.child(1))); if (head.equals("++")) return plusmax((ElementNode)walk(t.child(0))); if (head.equals("+")) return plus((ElementNode)walk(t.child(0))); @@ -99,7 +100,7 @@ public class GrammarBuilder { if (head.equals("Quoted")) return stringifyChildren(t); if (head.equals("Literal")) return new LiteralNode((String)walk(t.child(0))); if (head.equals("->")) return arrow((Seq)walk(t.child(0)), (ElementNode)walk(t.child(1))); - if (head.equals("DropNT")) return new NonTerminalNode((String)walk(t.child(0)), (Seq[][])walk(t.child(1)), true, null, true); + if (head.equals("DropNT")) return new NonTerminalNode((String)walk(t.child(0)), (Seq[][])walkChildren(t.child(1)), false, null, true); if (head.equals("=") && t.size()==2) return new NonTerminalNode((String)walk(t.child(0)), (Seq[][])walk(t.child(1)), true, null, false); if (head.equals("=")) return new NonTerminalNode((String)walk(t.child(0)), (Seq[][])walk(t.child(2)), true, (String)walk(t.child(1)), false); if (head.equals("&")) return and2((Seq)walk(t.child(0)), (Seq)walk(t.child(1))); @@ -326,8 +327,6 @@ public class GrammarBuilder { if (!drops[i]) if (idx==-1) idx = i; else multiNonDrop = true; - if (tag==null && multiNonDrop) - throw new Error("multiple non-dropped elements in sequence: " + Sequence.create(els, "")); for(int i=0; i