Петров Александр schrieb:
> Hello,
> why such grammar doesn't work properly:
> --------------------------------------------------------------------------------------
> expr  :
>         operand ((oper) operand)*
>               ;
> //Correct operands
> operand       :
>       INT
>       ;
> OPER: ('+'|'-'|'*'|'/')
>       ;
> INT   :       
>       ('0'..'9')+
>       ;
> --------------------------------------------------------------------------------------
>> t+1
> line 0:3 mismatched input '+' expecting EOF
> 
> But if I replace the Lexer rule by Parser rule:
> 
> oper: ('+'|'-'|'*'|'/');
> 
> All work as it should. Why I should't use Lexer rule with alternatives ?

The problem with your example is that in the expr rule you use oper, but
define OPER as rule. Did you overlook this while posting or does even

expr    :
         operand (OPER operand)*
        ;

not work? Nonetheless, the usual way to define operands is to create a
single rule for each operand and reference those lexer rules in a single
parser rule for convenience. As "oper: ('+'|'-'|'*'|'/');" creates
implicit lexer rules doing it this way simulates the described approach,
but there can be problems as '+' used in to different rules will create
two distinct token types which will cause a MismatchedTokenTypeException
later.

Johannes
> 
> Thank you
> 
> List: http://www.antlr.org:8080/mailman/listinfo/antlr-interest
> Unsubscribe: 
> http://www.antlr.org:8080/mailman/options/antlr-interest/your-email-address
> 


List: http://www.antlr.org:8080/mailman/listinfo/antlr-interest
Unsubscribe: 
http://www.antlr.org:8080/mailman/options/antlr-interest/your-email-address


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to