X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=1f7718faa66ae06da91a2d39de72a2342ba0ef71;hb=f22d53e6ae3581e6c2dc096fd0cf93c18e2d2538;hp=a284938e5153a0f32a1218fc3327738db7f3d84a;hpb=74e53cbf7227f5958ff7495abe31cb0462d62c4e;p=sbp.git diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index a284938..1f7718f 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -18,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() { } @@ -50,6 +50,10 @@ 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); } @@ -195,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(); } @@ -370,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; } } @@ -381,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)); + } } }