Antlr:忽略特定上下文中的关键字

Antlr:忽略特定上下文中的关键字,antlr,grammar,antlr3,ll,Antlr,Grammar,Antlr3,Ll,我正在用ANTLR构建一种类似英语的领域特定语言。它的关键字是上下文敏感的。(我知道这听起来很脏,但对于非程序员的目标用户来说很有意义。)例如,通常的逻辑运算符,如或和非在括号中被视为标识符,[像这样和这样]。我目前的做法如下: bracketedStatement : '[' bracketedWord+ ']' ; bracketedWord : (~(']')+ ; 当与下列词汇定义结合使用时: AND: 'and' ; OR: 'or' ; 产生

我正在用ANTLR构建一种类似英语的领域特定语言。它的关键字是上下文敏感的。(我知道这听起来很脏,但对于非程序员的目标用户来说很有意义。)例如,通常的逻辑运算符,如
在括号中被视为标识符,[像这样和这样]。我目前的做法如下:

bracketedStatement
    : '[' bracketedWord+ ']'
    ;

bracketedWord
    :   (~(']')+
    ;
当与下列词汇定义结合使用时:

AND: 'and' ;
OR: 'or' ;

产生警告
“决策可以使用多个选项匹配输入,例如“{AND..PROCESS,RPAREN..not with'}”:1,2“
。我显然在为ANTLR制造歧义,但我不知道如何解决它。如何修复此问题?

对于任何发现此问题的人,请查看此问题,它阐明了如何正确使用否定符号。

您能给出一个更完整的示例吗?在ANTLR中,规则的顺序很重要,可能会导致歧义。
~(']')
在解析器规则中,它的作用与您认为的不同。见:可能重复的