X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=d385a5515e3294f6344cae6527c61a3859e89bfa;hp=71782dd60d03bdb1e03b19c23471c6a0faca6a44;hb=2724e3d1df836f6ce40bc4227f1509e777de2e48;hpb=5cf6851e385edfdec4955120e03bf7e282dc8a68 diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index 71782dd..d385a55 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -82,13 +82,24 @@ public class MetaGrammar extends ReflectiveWalker { } public Object _backslash__leftbrace_(String s) { return SELF; } - public Object _leftbrace_(String s) { return SELF; } - public Object _plus_(final Element r) { return Repeat.many1(r); } + public Object _leftbrace_(PreSequence p) { + return nonTerminal("braced"+(anon++), + new PreSequence[][] { + new PreSequence[] { + new PreSequence(CharToken.leftBrace), + p, + new PreSequence(CharToken.rightBrace) + } + }, + false, + false); + } - public PreSequence rewrite(Object[] o) { return new PreSequence(o, null); } - public PreSequence _equals__greater_(Object[] o, String s) { return new PreSequence(o, s); } + public Object _plus_(final Element r) { return Repeat.many1(r); } + public PreSequence rewrite(Object[] o) { return new PreSequence(o, null); } + public PreSequence _equals__greater_(Object[] o, String s) { return new PreSequence(o, s); } public PreSequence seq(Object[] o, Object sep, String tag) { return new PreSequence(sep==null ? o : _slash_(o, sep), tag); } - public Object[] seq(Object[] o) { return o; } + public Object[] seq(Object[] o) { return o; } public Object[] _slash_(Object[] o, Object sep) { if (o.length <= 1) return o; Object[] ret = new Object[o.length * 2 - 1]; @@ -141,6 +152,8 @@ public class MetaGrammar extends ReflectiveWalker { public /*final*/ String tag; public final Object[] o; + public PreSequence(Object o) { this(new Object[] { o }, null); } + public PreSequence(Object[] o) { this(o, null); } public PreSequence(Object[] o, String tag) { this.o = o; this.tag = tag; } boolean[] drops = null; public Union buildUnion() {