X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=e9c4413eed6c6b1fd0103db6e96be35368c857a4;hp=826087cb1f947c7799c99e07b798ee24eb8c4c86;hb=bb4357ee026741cacecdfbfdcdd2d44699306536;hpb=0c29e5bd879906ec108db3216c0f4979ed8315fb diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index 826087c..e9c4413 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(); } @@ -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; } }