ANTLR4 左递归错误 [英] ANTLR4 left-recursive error

查看:29
本文介绍了ANTLR4 左递归错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在文件 power.g4 中的 ANTLR4 语法是这样的:

My ANTLR4 grammar in file power.g4 is this:

assign     : id '=' expr ;
id         : 'A' | 'B' | 'C' ;
expr       : expr '+' term
           | expr '-' term
           | term ;
term       : term '*' factor
           | term '/' factor
           | factor ;
factor     : expr '**' factor
           | '(' expr ')'
           | id ;
WS         : [ \t\r\n]+ -> skip ;

当我运行命令时

antlr4 power.g4

antlr4 power.g4

发生此错误:

error(119): power.g4::: 以下规则集相互左递归[expr, factor, term]

error(119): power.g4::: The following sets of rules are mutually left-recursive [expr, factor, term]

我能做什么?

推荐答案

为了避免左递归错误,将 expr 的所有形式放在一个规则中,按所需的优先级排序:

To avoid the left recursion error, put all forms of an expr in one rule, ordered by desired precedence:

expr       : '(' expr ')'
           | expr '+'  expr 
           | expr '-'  expr 
           | expr '*'  expr 
           | expr '/'  expr 
           | expr '**' expr 
           | id 
           ;

这篇关于ANTLR4 左递归错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆