当我编译以下ANTLR语法文件时,
conditional_expression
: (logical_or_expression -> logical_or_expression) ('?' expression ':' rhs=conditional_expression -> ^('?' $conditional_expression expression $rhs))?
;
我收到以下错误消息。
错误(132):nesC.g:769:109:引用$ conditional_expression是 暧昧;规则conditional_expression是封闭规则和 在生产中引用(保证附上规则)
有人可以告诉我解决方法吗?谢谢。 : - )
答案 0 :(得分:2)
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?
;
要让它按照您现在的尝试运行,您需要将rhs=conditional_expression
移动到自己的规则,在这种情况下,没有不明确的命名:
conditional_expression
: (logical_or_expression -> logical_or_expression)
('?' expression ':' rhs -> ^('?' $conditional_expression expression rhs))?
;
rhs
: conditional_expression
;
但是这也不会为你做到这一点:
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))?
;