2013-10-17 23 views
0

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

bracketedStatement 
    : '[' bracketedWord+ ']' 
    ; 

bracketedWord 
    : (~(']')+ 
    ; 

此,与词汇的定义,例如以下组合:

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

给出警告"Decision can match input such as "{AND..PROCESS, RPAREN..'with'}" using multiple alternatives: 1, 2"。我清楚地为ANTLR创造了歧义,但我不知道如何解决它。我该如何解决?

+0

你能展示一个更完整的例子吗?在ANTLR中,规则的顺序很重要,可能会导致含糊不清。 – Apalala

+1

解析器规则中的'〜(']')'不符合你的想法。参见:http://stackoverflow.com/questions/8284919/negating-inside-lexer-and-parser-rules –

回答