X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FGrammarBuilder.java;fp=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FGrammarBuilder.java;h=121f4808fe972c7a081844652d6450201f3f214e;hp=f38bd8e11e25f837ae6e2425ddf25fd5d253615c;hb=1d5f76f8144b739719737bfe75f321caf67cfa19;hpb=927c045f06deedc545be39d9a84cb0ac1f0dd939 diff --git a/src/edu/berkeley/sbp/meta/GrammarBuilder.java b/src/edu/berkeley/sbp/meta/GrammarBuilder.java index f38bd8e..121f480 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 "";