[antlr-interest] Lexer syntactic predicates

chintan rao chintanraoh at gmail.com
Mon Jun 18 18:53:10 PDT 2007


Hi all,
I had a doubt about syntactic predicates
I am sorry if i am asking a often repeated question .
I searched on the net and it did not help .

suppose i do this antlr2 it works perfectly fine .

<code>

protected NotIdType :~('a'..'z'| 'A'..'Z' | '_' | '0'..'9') ;

HEX_BIN_DEC:
    ( HEX H )  => (HEX H) { $setType(HEX); } //now HEX token will be
assigined to  1234H
   | ( BIN B )  => (BIN B) { $setType(BIN); } //now BIN token will be
assigined to  1010B
   | ( DEC D ) => (DEC D) { $setType(DEC); } //now DEC token will be
assigined to  1234D
   | ( DEC NotIdType )=> DEC { $setType(DEC); } //now DEC token will
be assigined to  //1234

</code>

i change this to antlr 3 grammar

<code>

fragment NotIdType :~('a'..'z'| 'A'..'Z' | '_' | '0'..'9') ;

HEX_BIN_DEC:// to resolve the ambiguity b/w bases
   (HEX H) => (HEX H) { $type=(HEX); }     //now HEX token will be
assigined to  1234H
   | ( BIN B ) => ( BIN B ) { $type=(BIN); }     //now BIN token will
be assigined to  1010B
   | ( DEC D )  => ( DEC D ) { $type=(DEC); }   //now DEC token will
be assigined to  1234D
   | ( DEC NotIdType )=> (DEC) { $type=(DEC); }  //now DEC token will
be assigined to  1234

</code>

this does not work fine as in
1234a will still be assigned DEC token due to the rule
 ( DEC NotIdType )=> (DEC){$type=(DEC);} //now DEC token will be
assigined to  1234
but this should not be so accotding to antlr 2

Please tell me what changes i need to make in the grammar to do the
same in antlr 3

Chintan Rao H


More information about the antlr-interest mailing list