X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammarBindings.java;h=da0204a157a8642b9588cb3609f18fe1cacebd47;hb=df76fcb56242a90011500ab89092d2108350a8ab;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..da0204a 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java @@ -49,15 +49,21 @@ 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 static @bind.as("=") NonTerminal go(@bind.arg String name, @bind.arg Seq[][] sequences) { return new NonTerminal(name, sequences, true); } + public static @bind.as("=") NonTerminal go(@bind.arg String name, @bind.arg String sep, @bind.arg Seq[][] sequences) { + return new NonTerminal(name, sequences, true, sep); + } public static class AnonUn extends Un { public @bind.as("(") AnonUn(Seq[][] sequences) { @@ -212,7 +218,17 @@ public class MetaGrammarBindings { public static @bind.as("{") class XTree extends El { public @bind.arg Seq body; public Element build(MetaGrammar.Context cx) { - throw new Error(); + Union u = new Union(); + Sequence s = body.build(cx, u, false); + Union u2 = new Union(); + u2.add(Sequence.singleton(new Element[] { + CharRange.leftBrace, + cx.get("ws"), + u, + cx.get("ws"), + CharRange.rightBrace + }, 2)); + return u2; } }