[antlr-interest] parser backtrack issue
    David Holroyd 
    dave at badgers-in-foil.co.uk
       
    Sat Jan 19 04:58:21 PST 2008
    
    
  
On Fri, Jan 18, 2008 at 06:44:17PM -0800, Ashish wrote:
> I can get rid of the error if booleanExpressions is defined as
>  booleanExpressions
>      :  booleanExpression ( (BOOLEAN_OR  | BOOLEAN_AND) booleanExpression )*
> 
> however I am not sure how to go about writing the rewrite rule for AST
> generation for this one line version.
It's quite simple with tree structuring operators (assuming you don't
have additional reasons to use a rewrite),
  booleanExpressions
      :  booleanExpression ( boolOp^ booleanExpression )*
      ;
  boolOp
      :  BOOLEAN_OR  | BOOLEAN_AND
      ;
Expressing this with the rewrite syntax is a bit more fiddly,
  booleanExpressions
      :  (   booleanExpression
             -> booleanExpression
	 )
         (   boolOp booleanExpression
             -> ^(booleanOp $booleanExpression booleanExpression)
         )*
      ;
The (apparently redundant) booleanExpression->booleanExpression is
required to set the initial value of the $booleanExpressions result
tree.
ta,
dave
-- 
http://david.holroyd.me.uk/
    
    
More information about the antlr-interest
mailing list