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
这样的输入解析到以下树中: