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 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); }
public MetaGrammar grammar(Object[] o) { return this; }
public Object walk(Tree<String> tree) {
- if ("grammar".equals(tree.head())) { for(Tree<String> t : tree.children()) walk(t); return done("s"); }
- //if ("grammar".equals(tree.head())) return done("s");
+ if ("grammar".equals(tree.head())) { walkChildren(tree); return done("s"); }
else return super.walk(tree);
}
- /*
- public Object walk(String head, Object[] args) {
- if ("grammar".equals(head)) return done("s");
- else return super.walk(head, args);
- }
- */
}
private static String pad(int i,String s) { return s.length() >= i ? s : pad(i-1,s)+" "; }
public abstract class TreeWalker<T> {
public abstract Object walk(T head, Object[] args);
+ public void walkChildren(Tree<T> tree) {
+ for(Tree<T> child : tree.children()) walk(child);
+ }
public Object walk(Tree<T> tree) {
Object[] args = new Object[tree.numChildren()];
int i = 0;