我想知道为什么自上而下的解析器无法处理左递归,我们需要消除由于龙书中提到的左递归...
答案 0 :(得分:4)
想想它在做什么。假设我们有一个左递归生成规则A -> Aa | b
,现在我们尝试匹配该规则。所以我们正在检查我们是否可以在这里匹配A,但为了做到这一点,我们必须首先检查我们是否可以在这里匹配A.这听起来不可能,而且主要是。使用递归下降解析器,显然代表无限递归。
可以使用仍然自上而下的更高级技术,例如参见[1]或[2]。
[1]:Richard A. Frost和Rahmatullah Ha fi z。 一种新的自上而下的解析算法,用于在多项式时间内容纳歧义和左递归。 SIGPLAN Notices,41(5):46-54,2006。
[2]:R。Frost,R。Ha fi z和P. Callaghan,模块化和高效自上而下
解析模糊的左递归语法。 ACL-IWPT,pp.109 -
120,2007。
答案 1 :(得分:0)
自上而下的解析器无法处理左递归 自上而下的解析器无法处理左递归产生。要了解为什么不这样做,让我们采用一个非常简单的左递归语法。
问题在于,在前瞻a上,解析器无法知道在前瞻之后是否还有另一个a。但是,决定使用哪种产品取决于该信息。