[antlr-interest] Parse rule to add multiple homogeneous branches under a root node?
Stefan.Maetje at esd-electronics.com
Tue May 8 06:47:27 PDT 2012
Am 08.05.2012 14:25, schrieb Peter Bosch:
> Okay, I've tried to boil it down to a simple test case that illustrates
> (probably in my parse rule) what I'm doing wrong. Target is C#.
> public parse
> : ( r=BRANCH )* EOF -> ^(ROOT $r*)
> : 'Branch' ('0'..'9')
With that parse rule you will get only the last instance of the BRANCH
token. You should collect it into a list and then reference the list in
the rewrite rule. See below an excerpt of a grammar that builds two
statement lists "tList" and "eList" and uses them in the rewrite rule:
'IF' cond=condRoot 'THEN' tList+=statement*
('ELSE' eList+=statement*)? 'FIN'
-> ^('IF' $cond SLIST $tList* ^('ELSE' SLIST $eList*)?)
I think the following rule will do it for you (observe the '+' between
"r" and "=BRANCH"):
: ( r+=BRANCH )* EOF -> ^(ROOT $r*)
I hope that helps,
More information about the antlr-interest