当我编译以下ANTLR语法文件时,
conditional_expression
: (logical_or_expression -> logical_or_expression) ('?' expression ':' rhs=conditional_expression -> ^('?' $conditional_expression expression $rhs))?
;我得到以下错误消息。
错误(132):nesC.g:769:109: reference $conditional_expression是模棱两可的;规则conditional_expression是封装规则并在生产中引用的(assu明封装规则)
有人能告诉我这件事的解决办法吗?谢谢。:-)
发布于 2011-07-22 07:23:57
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))?
;https://stackoverflow.com/questions/6786645
复制相似问题