我正在写一个解析器。我有一个左递归的作品a: a op a
所以我用这种方式修复它:
ab : () (op ab)*;
其中op : + | - | / | *
现在我认为这是不明确的,例如像x + y * z这样的声明。我怎么能
消除这种模糊性?
答案 0 :(得分:0)
对于ANTLR 3,优先级隐含在为表达式执行的多个规则调用中。有很多关于如何在网络上构建递归下降表达式解析器的例子。
expr : primary (op primary)* ;
顺便说一句,一点都不含糊。
ANTLR 4允许您指定左递归表达式规则,并隐含地按备选顺序定义优先级,假设存在歧义。例如,这是一个典型的规则:
expr : expr '*' expr
| expr '+' expr
| INT
;