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))?
;
?