ANTLR模糊引用

ANTLR模糊引用,antlr,Antlr,当我编译下面的ANTLR语法文件时 conditional_expression : (logical_or_expression -> logical_or_expression) ('?' expression ':' rhs=conditional_expression -> ^('?' $conditional_expression expression $rhs))? ; 我收到以下错误消息 错误(132):nesC.g:769:109:引用$condit

当我编译下面的ANTLR语法文件时

conditional_expression
    : (logical_or_expression -> logical_or_expression) ('?' expression ':' rhs=conditional_expression -> ^('?' $conditional_expression expression $rhs))?
    ;
我收到以下错误消息

错误(132):nesC.g:769:109:引用$conditional_表达式为 模棱两可的;规则条件_表达式包含规则和 在产品中引用(关联封闭规则)


有人能告诉我解决这个问题的办法吗?谢谢。:-)

ANTLR无法确定您所说的
$conditional_expression
是指规则本身,还是您标记的
$rhs

conditional_expression // <--- this one?
  :  (logical_or_expression -> logical_or_expression) 
     ('?' expression ':' rhs=conditional_expression -> ^('?' $conditional_expression expression $rhs))?
                           //     ^
                           //     |
                           //     +--- or this one?
  ;
但这不也会对你有好处吗:

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

?

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