消除antlr中语法的模糊性

时间:2013-12-15 21:59:47

标签: antlr antlrworks

我正在写一个解析器。我有一个左递归的作品a: a op a 所以我用这种方式修复它: ab : () (op ab)*; 其中op : + | - | / | * 现在我认为这是不明确的,例如像x + y * z这样的声明。我怎么能 消除这种模糊性?

1 个答案:

答案 0 :(得分:0)

对于ANTLR 3,优先级隐含在为表达式执行的多个规则调用中。有很多关于如何在网络上构建递归下降表达式解析器的例子。

expr : primary (op primary)* ;
顺便说一句,

一点都不含糊。

ANTLR 4允许您指定左递归表达式规则,并隐含地按备选顺序定义优先级,假设存在歧义。例如,这是一个典型的规则:

expr : expr '*' expr
     | expr '+' expr
     | INT
     ;