[antlr-interest] Using rewrite rules with conditionals...
Elijah Epifanov
lists at xmart.ws
Thu Jun 7 00:04:20 PDT 2007
Cameron Esfahani wrote:
> I modified your example a little to account for NUMBER:
>
> optional_size_qualifier
> : size_qualifier? -> size_qualifier
> | -> SIZE_DEFAULT
> ;
Change this to:
optional_size_qualifier
: size_qualifier -> size_qualifier
| -> SIZE_DEFAULT
;
(the ambiguity is that empty input can be matched by both alternatives)
>
> size_qualifier
> : PERIOD 'U'? size_postfix -> size_postfix
> ;
>
> size_postfix
> : 'B' -> SIZE_8
> | 'W' -> SIZE_16
> | 'L' -> SIZE_32
> | 'Q' -> SIZE_64
> ;
>
> number_size
> : NUMBER optional_size_qualifier -> optional_size_qualifier NUMBER
> ;
>
> And I get lots of errors:
>
> error(211): T.g:223:4: [fatal] rule optional_size_qualifier has
> non-LL(*) decision due to recursive rule invocations reachable from alts
> 1,2. Resolve by left-factoring or using syntactic predicates or using
> backtrack=true option.
>
>
>
> On Jun 6, 2007, at 3:21 AM, Elijah Epifanov wrote:
>
>> Hi, I think this will do the job (start rule is now
>> optional_size_qualifier):
>>
>>
>> optional_size_qualifier
>>
>> : size_qualifier -> size_qualifier
>>
>> | -> SIZE_DEFAULT
>>
>> ;
>>
>>
>> size_qualifier
>>
>> : '.' ( 'u' | 'U' )? size_postfix -> size_postfix
>>
>> ;
>>
>>
>> size_postfix
>>
>> : ( 'b' | 'B' ) -> SIZE_8
>>
>> | ( 'w' | 'W' ) -> SIZE_16
>>
>> | ( 'l' | 'L' ) -> SIZE_32
>>
>> | ( 'q' | 'Q' ) -> SIZE_64
>>
>> ;
>>
>
> Cameron Esfahani
> dirty at apple.com <mailto:dirty at apple.com>
>
> "Even paranoids have enemies."
>
> Henry Kissinger
>
>
>
More information about the antlr-interest
mailing list