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
Post a Comment