标记中的antlr4混合片段

标记中的antlr4混合片段,antlr4,Antlr4,我观察到一种奇怪的行为,试图使用包含如下语句的语法解析文本: fragment A : ('a'|'A') ; fragment D : ('d'|'D') ; fragment N : ('n'|'N') ; KEY_AND : A N D; 我创建了一个简单的语法来产生我所经历的问题: grammar AndTest; mainRule: NAME SEP KEY_AND SEP NAME; NAME: ('A'..'Z')+ ; SEP: ';' ; fragment A : ('a

我观察到一种奇怪的行为,试图使用包含如下语句的语法解析文本:

fragment A : ('a'|'A') ;
fragment D : ('d'|'D') ;
fragment N : ('n'|'N') ;
KEY_AND : A N D;
我创建了一个简单的语法来产生我所经历的问题:

grammar AndTest;  
mainRule: NAME SEP KEY_AND SEP NAME;
NAME: ('A'..'Z')+ ;
SEP: ';' ;
fragment A : ('a'|'A') ;
fragment D : ('d'|'D') ;
fragment N : ('n'|'N') ;
KEY_AND : A N D;
WS: [ \r\t\n]+ -> skip ;
在grun执行期间,我得到了以下信息(这里我们有'AND'并得到一个错误,但是如果我们有'AND'则没有):

对于
echo ANDY;及;ANDY | grun和Test主规则-树

line 1:7 mismatched input 'AND' expecting KEY_AND
(mainRule ANDY ; AND ; ANDY)
(mainRule ANDY ; And ; ANDY)
对于
echo ANDY;及;ANDY | grun和Test主规则-树

line 1:7 mismatched input 'AND' expecting KEY_AND
(mainRule ANDY ; AND ; ANDY)
(mainRule ANDY ; And ; ANDY)
我的问题:执行过程中发生的错误是意料之中的,我的语法中遗漏了一些东西,或者它是antlr4中的一种错误


环境:Windows7x32、Java SE 1.8.0_60-b27、antlr 4.5.1

您的语法将输入“
”匹配到
名称
规则,然后再匹配到
键和
规则

预计会出现错误
符合
名称
的要求,并且
名称
列在
键和
之前。规则的顺序在antlr中很重要

键和
规则移动到
名称上方应该可以修复此错误