[antlr-interest] Moving from SableCC to ANTLR; What are tree grammars?

Loring Craymer lgcraymer at yahoo.com
Sat Apr 3 19:58:17 PDT 2010


Tree grammars describe AST processors, and are more powerful than visitors since they recognize token sequences as productions.  See <http://www.antlr.org/article/1100569809276/use.tree.grammars.tml>.

--Loring



----- Original Message ----
> From: Tyler Distad <tyler.distad at gmail.com>
> To: antlr-interest at antlr.org
> Sent: Sat, April 3, 2010 7:21:48 PM
> Subject: [antlr-interest] Moving from SableCC to ANTLR; What are tree grammars?
> 
> My Computer Science professor has taught his Compiler course with SableCC
for 
> years. I am investigating moving the class to ANTLR.

Under SableCC, after 
> creating a valid grammar, we used the Visitor pattern
to perform semantic 
> checking and AT&T assembly generation. To do this, we
created a 
> SemanticChecker class and a CodeGen class, both extending from the
SableCC 
> DepthFirstAdapter class. This allowed for a beautiful separation of
the 
> grammar definition and our processing code. We could also easily 
> make
multiple passes over our AST.

I have hunted high and low for an 
> ANTLR-specific method of doing anything
remotely similar. It has been 
> intimated (

> href="http://antlr.org/article/1100569809276/use.tree.grammars.tml" 
> target=_blank >http://antlr.org/article/1100569809276/use.tree.grammars.tml) 
> that tree
grammars should let me do what I want, but I must be 
> misunderstanding
because my implementation is wholly inadequate.

Two 
> questions:

1) What is the point of a tree grammar? My work so far seems 
> to indicate
that anything I can do in a "tree grammar" (such as actions, 
> rewrites,
etc.), I can just as easily do in a "combined grammar."

2) 
> Assuming tree grammars are useful, then when working with them, do I
*really* 
> have to copy/paste my rule definitions from my combined grammar?
The 
> simplecTreeParser example in the examples-v3 file on the ANTLR 
> website
certainly looks that way. I want to just be able to reference my 
> tree
somewhere...not redefine the whole thing for every single 
> pass.

Tyler Distad

For reference, below is a snippet of my 
> non-tree-grammar. I do NOT want to
copy/paste this code into a new 
> tree-grammar definition. I want to be able
to easily work with it from 
> outside the AST.

    stmt: stmtAsmt
      
>   | stmtIf
        | stmtWhile
    
>     | expr SEMICOLON_CH -> ^(STMT expr)
    
> ;

    stmtAsmt
        : ID ASSIGN_OP 
> expr SEMICOLON_CH
        -> ^(STMT ID expr)
  
>       ;

    stmtIf
      
>   : IF_KW L_PAR_CH expr R_PAR_CH L_BRACE_CH stmt* R_BRACE_CH 
> (ELSE_KW
L_BRACE_CH stmt* R_BRACE_CH)?
        -> 
> ^(STMT expr stmt* stmt*)
        ;

    
> stmtWhile
        : WHILE_KW L_PAR_CH expr R_PAR_CH 
> L_BRACE_CH stmt* R_BRACE_CH
        -> ^(STMT expr 
> stmt*)
        ;

List: 
> href="http://www.antlr.org/mailman/listinfo/antlr-interest" target=_blank 
> >http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: 
> href="http://www.antlr.org/mailman/options/antlr-interest/your-email-address" 
> target=_blank 
> >http://www.antlr.org/mailman/options/antlr-interest/your-email-address


      



More information about the antlr-interest mailing list