[antlr-interest] OR alternatives

g4 at novadsp.com g4 at novadsp.com
Mon Feb 28 14:35:17 PST 2011


The CoCo grammar expression spec is shown below [2].  My problem is with 
constructions such as these:

CS = { ExternAliasDirective }
         { UsingDirective }
         EOF .

CS results in an AST with a OR_EXPR node although no '|' character 
actually appears. I'm sure this is due to my simplistic definition of 
expression but I cannot see any other way to write the rules.

I did experiment with [1] to resolve the ambiguity. It does work but the 
hack seems only to reinforce the fact that the basic construction is wrong.

Any tips much appreciated.

Jerry.

[1] expression
@init { bool ored = false; }
     : term {ored = (input.LT(1).Type == OR); } (OR term)*
         ->  {ored}? ^(OR_EXPR term term*)
         ->            ^(LIST term term*)


[2] rule '=' expression '.' ;

expression
     : term ('|' term)*
         -> ^( OR_EXPR term term* )
     ;
term
     : (factor (factor)*)? ;

factor
     : symbol
     | '(' expression ')'
         -> ^( GROUPED_EXPR expression )
     | '[' expression']'
         -> ^( OPTIONAL_EXPR expression)
     | '{' expression '}'
         -> ^( SEQUENCE_EXPR expression)
     ;

symbol
     : IF_ACTION
     | ID (ATTRIBUTES)?
     | STRINGLITERAL
     ;





More information about the antlr-interest mailing list