Antlr 有可能不允许自递归吗?

Antlr 有可能不允许自递归吗?,antlr,antlr4,Antlr,Antlr4,我有规则: expression : //... | expression (relative_operator expression)+ | //... ; 理想情况下,当我输入1=1=1时,它将生成表达式(1,=,1,=,1)树。然而,实际上它会生成表达式(1,=,表达式(1,=,1))。这是因为它更喜欢递归解析,而不是一行解析。是否可以明确地告诉规则它不能在自身上递归,或者在尝试在自身上递归之前,它应该遵循+/* 可以显式地告诉规则它不能在自身上递归,或者在尝试在

我有规则:

expression
   : //...
   | expression (relative_operator expression)+
   | //...
   ;
理想情况下,当我输入
1=1=1
时,它将生成
表达式(1,=,1,=,1)
树。然而,实际上它会生成
表达式(1,=,表达式(1,=,1))
。这是因为它更喜欢递归解析,而不是一行解析。是否可以明确地告诉规则它不能在自身上递归,或者在尝试在自身上递归之前,它应该遵循
+
/
*

可以显式地告诉规则它不能在自身上递归,或者在尝试在自身上递归之前应该遵循+/*吗

不,你必须像这样重写你的语法:

expr
:添加
;
添加
:mult((“+”|“-”)mult)*
;
骡子
:一元((“*”|“/”)一元)*
;
一元
: '-'? 原子
;
原子
:“('expr')”
|数
|变数
;
它将像
1+2+3*4*5/6
这样的输入解析到以下树中: