[antlr-interest] [antlr-dev] Need help with tree traversing in ANTLR 3.3!
Sam Harwell
sharwell at pixelminegames.com
Fri Jun 10 12:06:38 PDT 2011
Hi Payam,
Any rule in a parser or tree parser can return 0 or more items. Since the
Java method implementing a rule can only return 0 or 1 items, some special
handling is in place to allow you to do what you're after. Consider a rule
"foo" which currently returns a single int:
foo returns [int x] : {$x = 3;} ;
In a regular parser (non-AST), the rule will be generated as:
private int foo();
When you add the "output=AST" option, the rule now returns 4 values:
options {
output=AST;
ASTLabelType=CommonTree;
LabelType=CommonToken;
}
1. int x
2. ASTLabelType tree
3. LabelType start
4. LabelType stop
The function is generated as follows:
foo_return foo();
Which you can call like this to get the return values:
foo_return result = parser.foo();
int x = result.x;
CommonTree tree = result.tree;
Sam
On Jun 10, 2011, at 10:01 AM, Payam Fard wrote:
> Dear all,
>
> I have a grammar for a fairly small and simple language that I have
created for our project. Once every command in this language is parsed
through this grammar, a Java object is returned. Everything is working fine.
>
> Now, I have a requirement to read all the available rules/commands of the
language (I am only interested in the command/rule names). In order to do
so, I have been trying to get the AST tree working by adding options to my
grammar for AST tree. For some reason, when I add these options to my
grammar, I am getting compilation error complaining that my grammar rules
cannot return any Java objects! Can I have commands/rules of my grammar
return some Java objects and at the same time be able to build an AST tree
off of my grammar?
>
> Is there an easy way to read these grammar command/rule names using antlr
runtime API's?
>
> Any code sample out there that shows how do to the above (namely returning
objects from grammar rules and building the tree at the same time)?
>
> Any help here would be greatly appreciate.
> _______________________________________________
> antlr-dev mailing list
> antlr-dev at antlr.org
> http://www.antlr.org/mailman/listinfo/antlr-dev
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address
More information about the antlr-interest
mailing list