要在ANTLR中删除左递归吗?

时间:2020-03-02 02:57:49

标签: antlr

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

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

目标是实现以下目标:

(数组类型) type -> 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吗?

1 个答案:

答案 0 :(得分:1)

否,那是不可能的。您不能在ANTLR4期间使用间接左递归。