X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=c96d2ff86e419f36f718c585a8edd30ba7e2c0ec;hb=b366a301b090a285c372f4fd77ab7472440f7d30;hp=33b3b1172464dd93588888c80c1473f49ccdaaaf;hpb=45d799349e635f1a99e3974e4504a43d5a7aaf33;p=sbp.git diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index 33b3b11..c96d2ff 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -115,14 +115,14 @@ public class MetaGrammar extends StringWalker { if ("\\n".equals(head)) return new Character('\n'); else if ("\\r".equals(head)) return new Character('\r'); else if ("grammar".equals(head)) { for(Tree t : tree.children()) walk(t); return this; } - else if ("*".equals(head)) return Repeat.many0((Element)walk(tree.child(0))); - else if ("+".equals(head)) return Repeat.many1((Element)walk(tree.child(0))); - else if ("+/".equals(head)) return Repeat.many1((Element)walk(tree.child(0)), (Element)walk(tree.child(1))); - else if ("*/".equals(head)) return Repeat.many0((Element)walk(tree.child(0)), (Element)walk(tree.child(1))); - else if ("++/".equals(head)) return Repeat.maximal1((Element)walk(tree.child(0)), (Element)walk(tree.child(1))); - else if ("**".equals(head)) return Repeat.maximal0((Element)walk(tree.child(0))); - else if ("++".equals(head)) return Repeat.maximal1((Element)walk(tree.child(0))); - else if ("?".equals(head)) return Repeat.maybe((Element)walk(tree.child(0))); + else if ("*".equals(head)) return Repeat.many0((Element)walk(tree.child(0)), repeatTag()); + else if ("+".equals(head)) return Repeat.many1((Element)walk(tree.child(0)), repeatTag()); + else if ("+/".equals(head)) return Repeat.many1((Element)walk(tree.child(0)), (Element)walk(tree.child(1)), repeatTag()); + else if ("*/".equals(head)) return Repeat.many0((Element)walk(tree.child(0)), (Element)walk(tree.child(1)), repeatTag()); + else if ("++/".equals(head)) return Repeat.maximal1((Element)walk(tree.child(0)), (Element)walk(tree.child(1)), repeatTag()); + else if ("**".equals(head)) return Repeat.maximal0((Element)walk(tree.child(0)), repeatTag()); + else if ("++".equals(head)) return Repeat.maximal1((Element)walk(tree.child(0)), repeatTag()); + else if ("?".equals(head)) return Repeat.maybe((Element)walk(tree.child(0)), repeatTag()); else if ("!".equals(head)) { Element e = (Element)walk(tree.child(0)); dropAll.add(e); return e; } else if ("&".equals(head)) return ((Sequence)walk(tree,0)).and(sequence(walk(tree, 1), true)); else if ("and".equals(head)) return ((Sequence)walk(tree,0)).and(sequence(walk(tree, 1), true)); @@ -186,6 +186,7 @@ public class MetaGrammar extends StringWalker { } public Object convertLabel(String label) { return label; } + public Object repeatTag() { return null; } public Object walk(String tag, Object[] argo) { if (argo.length==0) return super.walk(tag, argo); @@ -276,6 +277,7 @@ public class MetaGrammar extends StringWalker { for(int i=0; i