0
我正在用ANTLR构建一个类似英语的域特定语言。其关键字是上下文相关的。 (我知道这听起来很肮脏,但对于非程序员目标用户来说它很有意义)。例如,当通常的逻辑运算符(如or
和not
)被括在括号中时,将被视为标识符,[像这样和这个]。我目前的做法是这样的:Antlr:忽略特定上下文中的关键字
bracketedStatement
: '[' bracketedWord+ ']'
;
bracketedWord
: (~(']')+
;
此,与词汇的定义,例如以下组合:
AND: 'and' ;
OR: 'or' ;
给出警告"Decision can match input such as "{AND..PROCESS, RPAREN..'with'}" using multiple alternatives: 1, 2"
。我清楚地为ANTLR创造了歧义,但我不知道如何解决它。我该如何解决?
你能展示一个更完整的例子吗?在ANTLR中,规则的顺序很重要,可能会导致含糊不清。 – Apalala
解析器规则中的'〜(']')'不符合你的想法。参见:http://stackoverflow.com/questions/8284919/negating-inside-lexer-and-parser-rules –