[antlr-interest] Questions about ANTLR tree parsers

Suman Karumuri mansuk at gmail.com
Sat Oct 29 02:16:11 PDT 2005


Hi ,

1) Can anyone explain me what this action does. I have taken this
example from the calc.g file in antlr examples.

expr :  expr1        { ## = #(#[EXPR,"expr"],##); }    ;

I have gone through the docs but i am unable to understand what ##  in
an action is translated to .As i understand it is a shortcut for #expr
but it doesn't seem to be correct and i get many errors.

2) There are no docs on how to write the grammar for a tree parser.
>From what i have read and understood, this is the conclusion i have
reached:

" A parser grammar is shows associativity and precedence where as the
tree parser grammar is the grammar
- Without associativity
- Without precedence
- Without delimiting characters.
"

Is that correct?

3) I have a problem grouping multiple trees as a single node from a
rule.For example in the below grammar:

program :       stmt;

stmt    :       expr EOL
        |!      v:VAR EQUALS s:expr EOL
        { #v.setType(VAR_NAME); #stmt = #(#EQUALS, #s, #v); }
        |       PRINT^ expr EOL!
        |       WHILE^ cond sl:stmt_lst { #sl.setType(STMT_LIST);}

stmt_lst:       BEGIN! (EOL!)* (stmt)* END! (EOL!)*

expr : // This is an expression

I want the statement list to be a subtree of while root. But the above
set type does not seem to work. Am i  missing something important?

4) How is this rule in parser translated to tree parser?

program = (stmt)*

But in the tree parser this doesn't seem to work:

program = #(stmt)*

What is the right way to do it?

Thanks for your time.
-Suman


More information about the antlr-interest mailing list