Antlr4 以下规则集是相互左递归的
我正在使用ANTLR4,但出现以下错误: 以下规则集是相互左递归的[primary\u expression,primary\u no\u array\u creation\u expression] 下面是导致该错误的语法片段:Antlr4 以下规则集是相互左递归的,antlr4,Antlr4,我正在使用ANTLR4,但出现以下错误: 以下规则集是相互左递归的[primary\u expression,primary\u no\u array\u creation\u expression] 下面是导致该错误的语法片段: primary_expression : primary_no_array_creation_expression | array_creation_expression ; primary_no_array_creation_exp
primary_expression
: primary_no_array_creation_expression
| array_creation_expression
;
primary_no_array_creation_expression
: literal
| simple_name
| parenthesized_expression
| member_access
| primary_expression '.' identifier type_argument_list?
| primary_expression '(' argument_list? ')'
| primary_no_array_creation_expression '[' argument_list ']'
| this_access
| base_access
| primary_expression '++'
| primary_expression '--'
| object_creation_expression
| delegate_creation_expression
| anonymous_object_creation_expression
| typeof_expression
| checked_expression
| unchecked_expression
| default_value_expression
| anonymous_method_expression
| primary_expression '->' identifier
| primary_no_array_creation_expression '[' expression ']'
| sizeof_expression
;
在示例语法中,
primary\u expression
可以是primary\u no\u array\u creation\u expression
然后,primary\u no\u array\u creation\u expression
可以是primary\u expression++
因此,primary\u no\u array\u creation\u expression
也可以是primary\u no\u array\u creation\u expression++
例如,当对其他规则存在“单向”依赖关系时,这是允许的
term : Digit
| term Operator term
;
product : term Operator term ;
这将是有效的,因为即使一个术语是自引用的(左递归),它在自己的定义中也是如此
以下内容无效:
term : Digit
| term Operator term
| product Operator product
;
product : term Operator term ;
这里,产品
引用一个术语
,反之亦然,因此创建了一个相互向左的递归模式
你应该把你的语法分成不同的规则。我遇到了同样的问题,这里将详细讨论: