[antlr-interest] tree rewrite: breaking apart subtrees
Jared Klumpp
jklumpp at harmonia.com
Thu Jan 7 06:15:28 PST 2010
See "Rewrite rule element cardinality" in the Definitive Antlr Reference (pg. 184), it seems you want something like:
vars : VARDECL type (VARIABLE ID literal?)+
-> ^(VARDECL type ^(VARIABLE ID literal))+;
-J
Date: Wed, 6 Jan 2010 14:58:54 -0500
From: Laurie Harper <laurie at holoweb.net>
Subject: [antlr-interest] tree rewrite: breaking apart subtrees
To: antlr-interest at antlr.org
Message-ID: <FEFCE222-7000-48DC-8684-ACA5ECC441FB at holoweb.net>
Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes
I'm trying to construct a parser/translator that will transform an
extended version of a C-like language 'X' into standard 'X'. I can't
figure out quite what I need in my tree grammar to get the result I
want... For example, I have an input AST that looks something like this:
(VARDECL integer
(VARIABLE ivar1 (LITERAL 1))
(VARIABLE ivar2 (LITERAL 2))
(VARIABLE ivar3))
(VARDECL integer
(VARIABLE ivar4))
I need to rewrite it to look like this:
(VARDECL integer
(VARIABLE ivar1 (LITERAL 1)))
(VARDECL integer
(VARIABLE ivar2 (LITERAL 2)))
(VARDECL integer
(VARIABLE ivar3))
(VARDECL integer
(VARIABLE ivar))
My tree grammar contains a rule like this:
vars : ^(VARDECL type (^(VARIABLE ID literal?))+)
-> ^(VARDECL type)+ ^(VARIABLE ID literal)+;
but that's not giving a result that's even close to right :-) I've
tried all sorts of variations as I try to puzzle out the tree rewrite
syntax, to no avail. Can anyone offer any insight?
Thanks,
L.
More information about the antlr-interest
mailing list