X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=656f878e2bb6793dc4cc8d824da81b1fbcec400b;hp=ab359c619396447ac72e7e355fb3b79ea692f493;hb=ea83c68e20abf2e74f901502a053b413b93e5289;hpb=eeba855277aa8280f844757b18b681bbea68b174 diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index ab359c6..656f878 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -87,20 +87,15 @@ public class MetaGrammar extends ReflectiveWalker { new PreSequence[] { new PreSequence(new Element[] { leftBrace(), p.buildUnion(), - rightBrace() }) + rightBrace() + }) } }, false, false); } - public PreSequence rewrite(Object[] o) { return new PreSequence(o, null); } - - public PreSequence seqx(PreSequence p, String tag) { return _equals__greater_(p, tag); } - public PreSequence _equals__greater_(PreSequence p, String tag) { - p.tag = tag; - return p; - } + public PreSequence _equals__greater_(PreSequence p, String tag) { p.tag = tag; return p; } public PreSequence ps(Object[] o) { return new PreSequence(o); } public PreSequence ps2(Object[] o1, String s, Object[] o2) { @@ -124,11 +119,17 @@ public class MetaGrammar extends ReflectiveWalker { public Object _plus__plus_(final Element r) { return Repeat.maximal(Repeat.many1(r)); } public Element _question_(final Element r) { return Repeat.maybe(r); } - public MetaGrammar gram(Object o, MetaGrammar g, Object o2) { return g; } - public MetaGrammar grammar(Object[] o) { return this; } + public Object walk(Tree tree) { + String head = tree.head(); + if (tree.numChildren()==0) return super.walk(tree); + if ("\\n".equals(head)) return new Character('\n'); + else if ("\\r".equals(head)) return new Character('\r'); + else return super.walk(tree); + } + public MetaGrammar grammar(Object o, Union[] u, Object x) { return this; } - public char _backslash_n() { return '\n'; } - public char _backslash_r() { return '\r'; } + public Object gram(Object o, Object g, Object o2) { return g; } + public MetaGrammar grammar(Object[] o) { return this; } public Element literal(String s) { Element ret = string(s); dropAll.add(ret); return ret; } public Range _minus_(char a, char b) { return new Range(a, b); } public Range range(char a) { return new Range(a, a); } @@ -143,6 +144,8 @@ public class MetaGrammar extends ReflectiveWalker { return set(ret); } + ////////////////////////////////////////////////////////////////////////////// + public class PreSequence { public final HashSet and = new HashSet(); public final HashSet not = new HashSet();