ANTLR4 left-recursive error

天大地大妈咪最大 提交于 2019-12-13 03:09:13

问题


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 ;

When I run command

antlr4 power.g4

This error occurred:

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

What can I do?


回答1:


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 
           ;


来源:https://stackoverflow.com/questions/47100729/antlr4-left-recursive-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!