[antlr-interest] nesting rules, getting rule text
Robin Debreuil
robin at debreuil.com
Thu Mar 4 01:08:11 PST 2004
Hi again, two hopefully easy questions (that is - hard for me, easy for you
: ).
1) I can't seem to figure out how to nest rules... I'm using a hetrogeneous
tree, and would like rules like (DOT identifier)* to nest. So something
like:
ruleA
: ruleB (DOT! ruleB)*
;
becomes the tree:
AST_B
|
AST_B
|
AST_B
Maybe it would be easier to explain right by posting the type of thing I've
been trying, something like:
ruleA!
: r1:ruleB
( r2:ruleB {#r1 = #(#r1, #r2);} )*
{#ruleA = #r1;}
;
which nests, but turns a.b.c into #(a, c). I'm doing this in the parser, not
the tree walker.
2) When getting the text of a rule, I've been calling the generated
variables directly (xx_AST), as in:
ruleA!
: id:identifier STAR!
{ #ruleA = #( [Ident, id_AST.getText()] ); } // eg. "id_AST"
;
Is there a better way to do that? Ident in this case is a user defined AST
token if that makes a difference, as in:
tokens
{
Ident <AST=DDW.CSharp.Ident>;
}
Thanks for the help again : ). The C# parser is all running and put into
trees, but the trees need a lot of work in the expression area - like array
declarations etc. I'm kind of not getting some of the required syntax there
I'm afraid...
Cheers, and thanks as always : )
Robin
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/antlr-interest/
<*> To unsubscribe from this group, send an email to:
antlr-interest-unsubscribe at yahoogroups.com
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list