删除ANTLR中的左递归

  • 本文关键字:递归 ANTLR 删除 antlr
  • 更新时间 :
  • 英文 :


我想知道如何修复此错误?

以下规则集相互左递归[type,array_type]

目标是实现这样的目标:

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

应该包含在类型参数中。如有任何帮助,将不胜感激

以下代码:

// 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吗?

不,这是不可能的。不能在ANTLR4中使用间接左递归,句点。

最新更新