> but there can be problems as '+' used in to different rules will create
> two distinct token types which will cause a MismatchedTokenTypeException
> later.
This is exactly what happens with my grammar.
Thank you very much.
2008/11/22 Johannes Luber <[EMAIL PROTECTED]>:
> Петров Александр 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
-~----------~----~----~----~------~----~------~--~---