要在ANTLR中删除左递归吗?

问题描述 投票:-1回答:1

我想知道如何解决此错误?

以下几组规则是相互左递归的[type,array_type]

目标是实现这样的目标:

((数组类型)类型-> 类型 [expr]

应该包含在type参数中。任何帮助将不胜感激

以下代码:

// Types
type
  : atomic_type
  | named_type
  | pointer_type
  | record_type
  | enclosed_type
  | array_type
  ;

atomic_type
  : VOID
  | CHAR
  | INTEGER
  | BOOLEAN
  ;

named_type
  : IDENTIFIER
  ;

// LEFT SIDE RECURSION, SHOULD BE INCLUDED IN TYPE ABOVE
array_type
  : type MLBRACE expr MRBRACE
  ;

pointer_type
  : CARET type
  ;

record_type
  : BLBRACE IDENTIFIER COLON type BLBRACE (COMMA? IDENTIFIER COLON type) BRBRACE BRBRACE
  ;

enclosed_type
  : SLBRACE type SRBRACE 
  ;

编辑:我已经在:

type
  : atomic_type
  | named_type
  | pointer_type
  | record_type
  | enclosed_type
  | type MLBRACE expr MRBRACE
  ;

但是我的问题是,可以用array_type代替type MLBRACE expr MRBRACE吗?

antlr
1个回答
0
投票

不,那是不可能的。您不能在ANTLR4(句号)中使用间接左递归。

© www.soinside.com 2019 - 2024. All rights reserved.