识别 antlr4 中的左递归



语法(从其手册中复制(报告以下左递归,当 我取消评论以下生产:casting_type->constant_primary

error(119): The following sets of rules are mutually left-recursive [primary, method_call_root, method_call, cast]
and [casting_type, constant_cast, cast, constant_primary, constant_function_call, function_subroutine_call, primary]
and [subroutine_call, function_subroutine_call, constant_function_call, constant_primary, method_call, method_call_root, casting_type, primary, constant_cast, cast]

上述错误报告有 3 组规则。第三组有 2 个左递归:

  1. casting_type,constant_primary,constant_cast,casting_type
  2. casting_type,constant_primary,constant_function_call,function_subroutine_call,subroutine_call,method_call,method_call_root,初级,演员,casting_type

由于此错误是在我取消评论一个作品后报告的,因此我 认为期望在每个集合中至少看到它的名称是合理的(casting_type,constant_primary(。显然是第一组 缺少这两个名称,因此它不能包含递归。第二组(我不能给出完整的 这里的语法,因为它太长了(有递归-1和一些额外的名称 这似乎无关紧要。

我的问题是:为什么Antlr打印第一套和第二套规则? 这是antlr中的一个错误(我尝试了4.6和4.7,相同的结果(,还是暗示了我在这些集合中缺少某些内容的问题?

我在其他地方看到过类似的帖子,其中报告的名称没有指示递归,但经过更深入的分析,在其他地方发现了递归。

可能没有人能真正回答你的问题,即使是 ANTLR 的作者。对我来说,看起来你得到的后续错误没有多大意义,因为真正的错误使分析变得不可能(或者至少可能导致错误的结论(。当然,ANTLR中也可能有一个错误,但我建议专注于其中一个集合并修复它(如果你能看到是什么使它们相互递归(。也许其他错误消失了,或者您必须再次分析。

相关内容

  • 没有找到相关文章

最新更新