[antlr-interest] Tree Rewriting: Enumerate all possibilities to match

nafur nafur42 at gmail.com
Tue Jul 31 06:33:08 PDT 2012


Hi all,

I'm performing tree rewrites to manipulate my ASTs, however I have rules
that I want to apply only once (i.e. if there are multiple possibilities
to apply this rule within my AST, I want to apply it only in one place).

More general, I'm searching for a way to somehow enumerate all
possibilities to apply a bottomup rule on a tree.

With [1] I figured I have to write my own downup method. This is what I
got so far:

public Object downup(Object t, final int skip) {
	TreeVisitor v = new TreeVisitor(new CommonTreeAdaptor());
	TreeVisitorAction actions = new TreeVisitorAction() {
		public int skips = skip;
		public Object pre(Object t) { return t; }
		public Object post(Object t) {
			Object res = applyOnce(t, BaseTreeRewriter.this);
			if (res == t) return t;
			if (skips != 0) res = t;
			skips--;
			return res;
		}
	}
}

I try to apply the rule, if it doesn't change anything, I just return t;
If it changed something, but skips is not zero yet, I drop the result.
If skip is zero, I "use" the match.

However, I have the problem that for matches that I want to skip, the
actions in the rule are executed...

How should one implement this? Is there a way to test, if a rule can be
applied without actually applying it?

Thanks,
Gereon

[1] http://www.antlr.org/wiki/display/ANTLR3/Tree+pattern+matching


More information about the antlr-interest mailing list