如果 ANTLR 无法处理的规则在语法上本质上属于左递归规则,那么可以尝试使用 ANTLR 递归下降解析器实现该规则。具体做法是将该规则转换为等效但可被 ANTLR 处理的非左递归形式。下面是一个包含代码示例的
对于以下面的规则为例:
expr: expr '+' term | term; term: term '*' factor | factor; factor: '(' expr ')' | ID;
其中,expr 以及 term 均为左递归规则,无法直接由 ANTLR 处理。可以使用下列方法,将其转为非左递归形式:
expr: term ( '+' term ); term: factor ( '' factor )*; factor: '(' expr ')' | ID;
在上述改写后,每一个规则都没有左递归了。在代码实现时,使用递归下降解析器库会更容易。
上一篇:Antlr文件的格式化。