[antlr-interest] Parser - > Tree walker

CARLOS MELGAREJO carlos.melgarejo at rogers.com
Tue May 22 11:15:17 PDT 2007


Thanks Jim and Lucio,

 I really appreciate it guys.

 After a lot of trial-error, finally it works following your suggestion. I got a lot of error messages when I used antlrworks-1.0.jar the new
version that I just donwloaded today, then I tried using the plane command line $java org.antlr.Tool and again have some
error messages, finally I used the all version of antlrworks-1.0b11.jar and this one works just fine. 

  I believe was the some problem that I was facing yesterday, I tried first using token substitution, and then after a few changes stop working. 

  

 

----- Original Message ----
From: Jim Idle <jimi at temporal-wave.com>
To: CARLOS MELGAREJO <carlos.melgarejo at rogers.com>; antlr-interest at antlr.org
Sent: Tuesday, May 22, 2007 1:17:50 PM
Subject: RE: [antlr-interest] Parser - > Tree walker




 
 

<!--
 _filtered {font-family:"Cambria Math";panose-1:2 4 5 3 5 4 6 3 2 4;}
 _filtered {font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;}
 _filtered {font-family:Tahoma;panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;margin-bottom:.0001pt;font-size:12.0pt;font-family:"Times New Roman", "serif";}
a:link, span.MsoHyperlink
	{color:blue;text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{color:purple;text-decoration:underline;}
span.EmailStyle17
	{font-family:"Calibri", "sans-serif";color:#1F497D;}
.MsoChpDefault
	{font-size:10.0pt;}
 _filtered {margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
	{}
-->






Probably the easiest thing to do is change what you are
producing for the unary operators. You probably don’t even need unary +:
 

  
 

Add
 

  
 

tokens
 

{
 

     UNARYNEG;
 

}
 

  
 

After the options,
 

  
 

  
 

Then:
 

  
 

unaryExpression 
:  '+' ue=unaryExpression      -> $ue

                
|  '-' ue=unaryExpression      -> ^(UNARYNEG $ue)
 

     
           |  unaryExpressionNotPlusMinus

                 ;
 

…
 

  
 







From:
antlr-interest-bounces at antlr.org [mailto:antlr-interest-bounces at antlr.org] On
Behalf Of CARLOS MELGAREJO

Sent: Tuesday, May 22, 2007 10:10 AM

To: antlr-interest at antlr.org

Subject: [antlr-interest] Parser - > Tree walker
 







  
 







  Hi all,



  I'm trying to create a grammar that recognize simple expressions and
other goodies and generate an evaluation at the end.



  First I read "The definitive ANTLR Reference" book(for the
version 3) and I got all exited, and then after a lot of testing examples I was
encourage to start working in my project.



  So, making the long story short this is my Lexer-Parser grammar look
like:



grammar Expert;

options {

    output=AST;

    ASTLabelType=CommonTree;

}



// Starting point

statement : expression  ; 



expression  : conditionalAndExpression ( 'or'^ conditionalAndExpression
)*  ;



conditionalAndExpression : exclusiveOrExpression ( 'and'^ exclusiveOrExpression
)* ;



exclusiveOrExpression : equalityExpression ( 'xor'^ equalityExpression )* ;



equalityExpression : relationalExpression (('='^ | '!='^)
relationalExpression)*  ;



relationalExpression : additiveExpression ( ('<='^|'>='^|'<'^|'>'^)
additiveExpression )* ;       



additiveExpression : multiplicativeExpression ( ('+'^ | '-'^)
multiplicativeExpression )*  ;



multiplicativeExpression : unaryExpression ( ( '*'^ | '/'^ ) unaryExpression
)*  ;



unaryExpression  :  '+'^ unaryExpression 

                         
|  '-'^ unaryExpression

                   
      |  unaryExpressionNotPlusMinus

                   
      ;

  

unaryExpressionNotPlusMinus

    : 'not'^ unaryExpression

    | atom

    ;     

    

atom

    : literal  

    | log 

    | Date 

    | '('! expression  ')'!

    ;



literal    

    :   FloatingPointLiteral  

    |  
StringLiteral         

    ; 

......................



  So far so good, I'm able to create a pretty good AST, the only problem
that I'm facing with this grammar is that I build the following tree node:

 ^('-' expr expr)     // Arithmetic expression 

 ^('-'
expr)            //
Unary expression.



   My problem is that I don't know how to walk this tree, because of
the ambiguity in the rule abode created with '-'. 



   How I can solve the problem with unary expressions?. 

   Thanks in advance.
 
















-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20070522/0509d214/attachment-0001.html 


More information about the antlr-interest mailing list