X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=a284938e5153a0f32a1218fc3327738db7f3d84a;hp=3420ad5ca328f4c2b9692489313a1c39304a43e0;hb=74e53cbf7227f5958ff7495abe31cb0462d62c4e;hpb=9a51c5df6d121f44c34a60fea128c5da7c3dba87 diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index 3420ad5..a284938 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -7,8 +7,6 @@ import java.io.*; public class MetaGrammar extends StringWalker { - public static Object repeatTag = null; - public static Union make() throws Exception { return make(MetaGrammarTree.meta, "s"); } public static Union make(Tree tree, String nt) throws Exception { Meta.MetaGrammarFile mgf = new Meta().new MetaGrammarFile(tree); @@ -51,6 +49,7 @@ public class MetaGrammar extends StringWalker { } public static class Meta { + public Object repeatTag() { return null; } public Sequence resolveTag(String s, String nonTerminalName, Element[] els, Object[] labels, boolean [] drops) { return Sequence.rewritingSequence(s, els, labels, drops); } @@ -208,7 +207,7 @@ public class MetaGrammar extends StringWalker { } Sequence ret = null; if (dropAll) ret = Sequence.drop(els, false); - else if (unwrap) ret = Sequence.unwrap(els, /*repeatTag FIXME*/null, drops); + else if (unwrap) ret = Sequence.unwrap(els, repeatTag(), drops); else if (tag!=null) { ret = resolveTag(tag, bc.currentNonTerminal==null ? null : bc.currentNonTerminal.name, els, labels, drops); } else { @@ -307,11 +306,11 @@ public class MetaGrammar extends StringWalker { public Element build(BuildContext bc) { return !maximal ? (separator==null - ? Sequence.repeat(element.build(bc), zero, many, null, null) - : Sequence.repeat(element.build(bc), zero, many, separator.build(bc), null)) + ? Sequence.repeat(element.build(bc), zero, many, null, repeatTag()) + : Sequence.repeat(element.build(bc), zero, many, separator.build(bc), repeatTag())) : (separator==null - ? Sequence.repeatMaximal(infer(element.build(bc)), zero, many, null) - : Sequence.repeatMaximal(element.build(bc), zero, many, infer(separator.build(bc)), null)); + ? Sequence.repeatMaximal(infer(element.build(bc)), zero, many, repeatTag()) + : Sequence.repeatMaximal(element.build(bc), zero, many, infer(separator.build(bc)), repeatTag())); } public MetaRepeat(MetaClause element, boolean maximal, MetaClause separator, boolean zero, boolean many) { this.separator = separator;