X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FGrammarBuilder.java;h=ec734f77a502fed94ee482480896c57e22bec19d;hb=8a05c54202f3f5792bbd7146007c6718049fecd9;hp=f38bd8e11e25f837ae6e2425ddf25fd5d253615c;hpb=65c42fc8ec481eb1305a1f6bc005737b0870bc91;p=sbp.git diff --git a/src/edu/berkeley/sbp/meta/GrammarBuilder.java b/src/edu/berkeley/sbp/meta/GrammarBuilder.java index f38bd8e..ec734f7 100644 --- a/src/edu/berkeley/sbp/meta/GrammarBuilder.java +++ b/src/edu/berkeley/sbp/meta/GrammarBuilder.java @@ -85,9 +85,8 @@ public class GrammarBuilder { public Object walk(Tree t) { String head = (String)t.head(); - if (head.indexOf('.') != 0) - while(head.indexOf('.') != -1) - head = head.substring(head.indexOf('.')+1); + while(head.indexOf('.') > 0) + head = head.substring(head.indexOf('.')+1); if (head==null) throw new RuntimeException("head is null: " + t); if (head.equals("|")) return walkChildren(t); if (head.equals("RHS")) return walkChildren(t); @@ -130,6 +129,10 @@ public class GrammarBuilder { if (head.equals("\\{")) return new DropNode(new AtomNode(new AtomNodeRange(CharAtom.left, CharAtom.left))); if (head.equals("\\}")) return new DropNode(new AtomNode(new AtomNodeRange(CharAtom.right, CharAtom.right))); if (head.equals("~")) return new TildeNode((ElementNode)walk(t.child(0))); + if (head.equals("~~")) { + Seq seq = new Seq(star(new TildeNode(new AtomNode()))); + return seq.andnot((Seq)walk(t.child(0))); + } if (head.equals("Range") && t.size()==1) return new AtomNodeRange(unescape(t).charAt(0)); if (head.equals("Range")) return new AtomNodeRange(unescape(t).charAt(0), unescape(t).charAt(1)); if (head.equals("\"\"")) return ""; @@ -538,19 +541,4 @@ public class GrammarBuilder { } - public class XTree extends ElementNode { - public Seq body; - public XTree(Seq seq) { this.body = seq; } - public Element build(Context cx, NonTerminalNode cnt, boolean dropall) { - Union u = new Union(null, false); - Sequence s = body.build(cx, u, null, dropall); - Union u2 = new Union(null, false); - u2.add(Sequence.create(new Element[] { - CharAtom.leftBrace, - u, - CharAtom.rightBrace - }, 1)); - return u2; - } - } }