ANTLR不清楚多种备选方案
我有这个语法来匹配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
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”,但我认为这指的是您语法中的和。