【问题标题】:ANTLR4 left-recursive errorANTLR4 左递归错误
【发布时间】:2017-11-03 16:47:41
【问题描述】:

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

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

发生了这个错误:

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

我能做什么?

【问题讨论】:

标签: recursion antlr antlr4


【解决方案1】:

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

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

【讨论】:

  • 在 v3 中,有一个级联的调用,从低优先级到高优先级,就像 OP 所做的那样。在 v4 中,优先级必须从高到低,参见here
  • 是的,正如我所说,按期望的优先顺序列出,不管是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多