ANTLR ambiguous reference -


when compile following antlr grammar file,

conditional_expression     : (logical_or_expression -> logical_or_expression) ('?' expression ':' rhs=conditional_expression -> ^('?' $conditional_expression expression $rhs))?     ; 

i following error message.

error(132): nesc.g:769:109: reference $conditional_expression ambiguous; rule conditional_expression enclosing rule , referenced in production (assu ming enclosing rule)

can tell me solution this? thanks. :-)

antlr cannot decide mean $conditional_expression: rule itself, or 1 labeled $rhs.

conditional_expression // <--- one?   :  (logical_or_expression -> logical_or_expression)       ('?' expression ':' rhs=conditional_expression -> ^('?' $conditional_expression expression $rhs))?                            //     ^                            //     |                            //     +--- or one?   ; 

to working tried, you'll need move rhs=conditional_expression rule of own, in case there no ambiguous naming:

conditional_expression   :  (logical_or_expression  -> logical_or_expression)       ('?' expression ':' rhs -> ^('?' $conditional_expression expression rhs))?   ;  rhs   :  conditional_expression   ; 

but wouldn't trick you:

conditional_expression   :  (e=logical_or_expression                        -> logical_or_expression)       ('?' if_true=expression ':' if_false=expression -> ^('?' $e $if_true $if_false))?   ; 

or:

conditional_expression   :  (e=logical_or_expression                                                -> logical_or_expression)       ('?' if_true=conditional_expression ':' if_false=conditional_expression -> ^('?' $e $if_true $if_false))?   ; 

?


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -