[antlr-interest] Skipping AST nodes in tree-parsing
Arnar Birgisson
arnarb at oddi.is
Mon Sep 22 11:51:44 PDT 2003
Hello..
Thanks for the lightning fast response :o)
This works, I have:
funcdef
: #("function" ID arg_list (block_stmt)=> block:.)
;
This ensures that the atom is of the correct token.
One thought this leads to: what meaning does ! have in tree parsers?
Excpecting to match a token and create the AST for it but skip
descending
into it, I first tried
funcdef
: #("function" ID arg_list block_stmt!)
;
which was accepted by ANTLR but generated the exact same code as it did
without the !.
Arnar
> -----Original Message-----
> From: mzukowski at yci.com [mailto:mzukowski at yci.com]
> Sent: 22. september 2003 18:35
> To: antlr-interest at yahoogroups.com
> Subject: RE: [antlr-interest] Skipping AST nodes in tree-parsing
>
>
> funcdef
> : #("function" ID arg_list .)
> ;
>
> '.' is a wild card and just matches one node but does not
> decend into the
> tree, just like ID above does not descend into a tree and
> just matches one
> node of type ID.
>
> Monty
>
> -----Original Message-----
> From: Arnar Birgisson [mailto:arnarb at oddi.is]
> Sent: Monday, September 22, 2003 11:30 AM
> To: antlr-interest at yahoogroups.com
> Subject: [antlr-interest] Skipping AST nodes in tree-parsing
>
>
> Hello there..
>
> Is there a way in a treeparser to skip the walking/parsing of
> a tree node? I
> want to store a reference to the AST instead. Two examples:
>
> This is in my parser:
>
> funcdef
> : "function"^ ID LPAREN! arg_list RPAREN! block_stmt
> ;
>
> and in the tree parser:
> funcdef
> : #("function" ID arg_list block_stmt)
> ;
>
> Now, instead of parsing ID, arg_list and then block_stmt
> nodes, I only want
> to parse the ID and arg_list and skip over block_stmt,
> instead I will store
> a reference to the node in a hashtable indexed on the given ID.
>
> Later, when the function is called in the user-program, the
> tree-parser rule
> for a function call will look up the AST for the function
> definition by its
> name and manually call appropriate rule for walkin the AST,
> after installing
> the given paremeters into the symbol table.
>
> Another example of this is rewriting for loops to while loops:
>
> for (stmt1; expr; stmt2) stmt3;
>
> becomes
>
> stmt1; while (expr) { stmt3; stmt2; }
>
> This involves the reordering of the atoms, i.e. this
> translation scheme is
> not simple by the definiton of the Dragonbook.
>
> How does one do this kind of translation in a tree walker?
> Perhaps someone
> could point out a simpler solution, but if one could skip
> over nodes as
> described above and manually call the parsing method for them
> at a later
> time, this becomes trivial.
>
> Arnar
>
>
>
>
> Your use of Yahoo! Groups is subject to
> http://docs.yahoo.com/info/terms/
>
>
>
>
> Your use of Yahoo!
> Groups is subject to http://docs.yahoo.com/info/terms/
>
>
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list