ANTLR不清楚多种备选方案

ANTLR不清楚多种备选方案,antlr,grammar,antlr3,Antlr,Grammar,Antlr3,我有这个语法来匹配ANTLR中的简单逻辑谓词 exp : or ; or : and ('|' or)* ; and : unit ('&' and)* ; unit : '(' or ')' | STRING ; WS : ( ' ' | '\t' | '\r' | '\n' ) {$channel=HIDDEN;} ; STR

我有这个语法来匹配ANTLR中的简单逻辑谓词

exp :   or
    ;

or  :   and ('|' or)*
    ;

and :   unit ('&' and)*
    ;

unit    :   '(' or ')' |
        STRING
    ;

WS  :   ( ' '
        | '\t'
        | '\r'
        | '\n'
        ) {$channel=HIDDEN;}
    ;

STRING
    :  '\'' ( ESC_SEQ | ~('\\'|'\'') )* '\''
    ;

fragment
HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;

fragment
ESC_SEQ
    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
    |   UNICODE_ESC
    |   OCTAL_ESC
    ;

fragment
OCTAL_ESC
    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7')
    ;

fragment
UNICODE_ESC
    :   '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
    ;

我得到警告
决策可以使用多个选项匹配输入,例如“&”,1、2
,以及
规则的一个选项。我知道当语法中有歧义时会出现这个警告,但我真的看不出歧义是什么。我也不理解警告消息,因为它说输入“&”有多个选项,但“&”本身不应该是有效的输入。有人能指出其中的模糊性吗?我担心以后当语法变得更复杂时,它会把我搞得一团糟。

我想不是这样的:

or  :   and ('|' or)*
    ;

and :   unit ('&' and)*
    ;
你想要这个:

or  :   and ('|' and)*
    ;

and :   unit ('&' unit)*
    ;

您得到的表单是不明确的,因为当它处理嵌套的
(或
)时,它不知道该表单是否应该继续重复,吞下下下一个
|
(或
&
),或者它是否应该返回到外部表单并让它处理它。

我认为不是这样:

or  :   and ('|' or)*
    ;

and :   unit ('&' and)*
    ;
你想要这个:

or  :   and ('|' and)*
    ;

and :   unit ('&' unit)*
    ;

您得到的表单是不明确的,因为当它处理嵌套的
(或
)时,它不知道该表单是否应该继续重复,吞下下下一个
|
(或
&
),或者它是否应该返回到外部表单并让它处理它。

您是否编辑了代码或错误消息?您的错误是“Decision”,但我认为这是指语法中的
。您是否编辑了代码或错误消息?您的错误是“Decision”,但我认为这指的是您语法中的