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<String> tree, String nt) throws Exception {
Meta.MetaGrammarFile mgf = new Meta().new MetaGrammarFile(tree);
}
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);
}
}
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 {
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;