Antlr:忽略特定上下文中的关键字
我正在用ANTLR构建一种类似英语的领域特定语言。它的关键字是上下文敏感的。(我知道这听起来很脏,但对于非程序员的目标用户来说很有意义。)例如,通常的逻辑运算符,如Antlr:忽略特定上下文中的关键字,antlr,grammar,antlr3,ll,Antlr,Grammar,Antlr3,Ll,我正在用ANTLR构建一种类似英语的领域特定语言。它的关键字是上下文敏感的。(我知道这听起来很脏,但对于非程序员的目标用户来说很有意义。)例如,通常的逻辑运算符,如或和非在括号中被视为标识符,[像这样和这样]。我目前的做法如下: bracketedStatement : '[' bracketedWord+ ']' ; bracketedWord : (~(']')+ ; 当与下列词汇定义结合使用时: AND: 'and' ; OR: 'or' ; 产生
或和非在括号中被视为标识符,[像这样和这样]。我目前的做法如下:
bracketedStatement
: '[' bracketedWord+ ']'
;
bracketedWord
: (~(']')+
;
当与下列词汇定义结合使用时:
AND: 'and' ;
OR: 'or' ;
产生警告“决策可以使用多个选项匹配输入,例如“{AND..PROCESS,RPAREN..not with'}”:1,2“
。我显然在为ANTLR制造歧义,但我不知道如何解决它。如何修复此问题?对于任何发现此问题的人,请查看此问题,它阐明了如何正确使用否定符号。您能给出一个更完整的示例吗?在ANTLR中,规则的顺序很重要,可能会导致歧义。~(']')
在解析器规则中,它的作用与您认为的不同。见:可能重复的