X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=1f7718faa66ae06da91a2d39de72a2342ba0ef71;hb=f22d53e6ae3581e6c2dc096fd0cf93c18e2d2538;hp=3420ad5ca328f4c2b9692489313a1c39304a43e0;hpb=98ae7592861f7e7d3bf5744b5db84ffdefc6011d;p=sbp.git diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index 3420ad5..1f7718f 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -7,8 +7,6 @@ import java.io.*; public class MetaGrammar extends StringWalker { - public static Object repeatTag = null; - public static Union make() throws Exception { return make(MetaGrammarTree.meta, "s"); } public static Union make(Tree tree, String nt) throws Exception { Meta.MetaGrammarFile mgf = new Meta().new MetaGrammarFile(tree); @@ -20,8 +18,8 @@ public class MetaGrammar extends StringWalker { private static Element set(Range.Set r) { return CharRange.set(r); } private static Element string(String s) { return CharRange.string(s); } - private static Atom infer(Element e) { return infer((Topology)Atom.toAtom(e)); } - private static Atom infer(Topology t) { return new CharRange(new CharTopology(t)); } + /*private*/ static Atom infer(Element e) { return infer((Topology)Atom.toAtom(e)); } + /*private*/ static Atom infer(Topology t) { return new CharRange(new CharTopology(t)); } private MetaGrammar() { } @@ -51,6 +49,11 @@ public class MetaGrammar extends StringWalker { } public static class Meta { + public Object repeatTag() { return null; } + public Sequence tryResolveTag(String s, String nonTerminalName, Element[] els, Object[] labels, boolean [] drops) { + //return resolveTag(s, nonTerminalName, els, labels, drops); + return null; + } public Sequence resolveTag(String s, String nonTerminalName, Element[] els, Object[] labels, boolean [] drops) { return Sequence.rewritingSequence(s, els, labels, drops); } @@ -196,6 +199,9 @@ public class MetaGrammar extends StringWalker { boolean dropAll = false; if (tag!=null && tag.equals("[]")) unwrap = true; if (tag!=null && "()".equals(tag)) dropAll=true; + + NonTerminal old = bc.currentNonTerminal; + bc.currentNonTerminal = null; for(int i=0; i " + ret); } else { - int idx = -1; - for(int i=0; i t) { this.body = makeConjunct(t); } + public MetaTree(Conjunct c) { this.body = c; } public String toString() { return "{ " + body + " }"; } public Element build(BuildContext bc) { - return new Union("{}");// body.buildSequence(); + Union u = new Union(); + Union u2 = new Union(); + Sequence seq = body.buildSequence(bc); + u2.add(seq); + u.add(Sequence.singleton(new Element[] { CharRange.leftBrace, + new NonTerminalReference("ws").build(bc), + u2, + new NonTerminalReference("ws").build(bc), + CharRange.rightBrace } + , 2)); + //u.add(seq); + return u; } } - */ + public class MetaRange extends MetaClause { Range.Set range = new Range.Set(); public String toString() { return range.toString(); } @@ -371,6 +394,7 @@ public class MetaGrammar extends StringWalker { public class NonTerminalReference extends MetaClause { public String name; public NonTerminalReference(Tree name) { this.name = string(name); } + public NonTerminalReference(String name) { this.name = name; } public Element build(BuildContext bc) { return bc.build(name); } public String toString() { return name; } } @@ -382,7 +406,9 @@ public class MetaGrammar extends StringWalker { public MetaClause element; public MetaInvert(Tree t, Conjunct c) { this.element = makeMetaClause(t, c); } public String toString() { return "~"+element; } - public Element build(BuildContext bc) { return infer((Topology)Atom.toAtom(element.build(bc)).complement()); } + public Element build(BuildContext bc) { + return infer((Topology)Atom.toAtom(element.build(bc)).complement().minus(CharRange.braces)); + } } }