X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammarBindings.java;h=ca24fd0a9344322265bb412238a8f6eb6860a9aa;hb=fd6696ef3305d6dc0aaace4379230658d3af6174;hp=2866107053256c5e0e21862a02516295e5121b76;hpb=87bf9df44b553d0e5fb1465983b0dc9f90b699b0;p=sbp.git diff --git a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java index 2866107..ca24fd0 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java @@ -49,15 +49,51 @@ public class MetaGrammarBindings { public static class NonTerminal extends Un { public boolean rep; public String name = null; + public String sep = null; public @bind NonTerminal(@bind.arg String name, @bind.arg Seq[][] sequences) { this(name, sequences, false); } - public NonTerminal(String name, Seq[][] sequences, boolean rep) { + public NonTerminal(String name, Seq[][] sequences, boolean rep) { this(name, sequences, rep, null); } + public NonTerminal(String name, Seq[][] sequences, boolean rep, String sep) { this.name = name; this.sequences = sequences; this.rep = rep; + this.sep = sep; } public Element build(MetaGrammar.Context cx) { return cx.get(name); } + public void build(MetaGrammar.Context cx, Union u) { + if (!rep) { super.build(cx, u); return; } + HashSet bad2 = new HashSet(); + + Union urep = new Union(); + urep.add(Sequence.empty); + urep.add(Sequence.singleton(new Element[] { cx.get(sep), u }, 1)); + + for(int i=0; i