X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=1cf8d8c72c90023a54bba5edac1f763906965423;hp=031dccdfec6134ca6f3a4cec695a6f14e05f5896;hb=cc74b5426df13674985366b5f297c164906e5b85;hpb=1b9a941b0fd32b8d3b9364d354b75ad033355931 diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index 031dccd..1cf8d8c 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -119,11 +119,18 @@ 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 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 if ("grammar".equals(head)) { for(Tree t : tree.children()) walk(t); return this; } + else return super.walk(tree); + } + public MetaGrammar grammar(Object o, Union[] u, Object x) { return this; } public Object gram(Object o, Object g, Object o2) { return g; } public MetaGrammar grammar(Object[] o) { return this; } - public char _backslash_n() { return '\n'; } - public char _backslash_r() { return '\r'; } 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); }