Parsing 为什么自顶向下解析器不能处理左递归?

Parsing 为什么自顶向下解析器不能处理左递归?,parsing,compiler-construction,left-recursion,Parsing,Compiler Construction,Left Recursion,我想知道为什么自上而下的解析器不能处理左递归,我们需要消除左递归,正如《龙书》中提到的那样。想想它在做什么。假设我们有一个左递归产生式规则a->Aa | b,现在我们尝试匹配该规则。所以我们正在检查我们是否可以匹配A,但是为了做到这一点,我们必须首先检查我们是否可以匹配A。这听起来不可能,而且大多数情况下是这样。使用递归下降解析器,这显然表示无限递归 可以使用仍然是自顶向下的更高级技术,例如参见[1]或[2] [1] :Richard A.Frost和Rahmatullah Ha fiz。一种新

我想知道为什么自上而下的解析器不能处理左递归,我们需要消除左递归,正如《龙书》中提到的那样。

想想它在做什么。假设我们有一个左递归产生式规则
a->Aa | b
,现在我们尝试匹配该规则。所以我们正在检查我们是否可以匹配A,但是为了做到这一点,我们必须首先检查我们是否可以匹配A。这听起来不可能,而且大多数情况下是这样。使用递归下降解析器,这显然表示无限递归

可以使用仍然是自顶向下的更高级技术,例如参见[1]或[2]

[1] :Richard A.Frost和Rahmatullah Ha fiz。一种新的自顶向下解析算法,以适应多项式时间内的歧义和左递归。SIGPLAN公告,41(5):46-542006。
[2] :R.Frost、R.Ha fiz和P.Callaghan,模块化且高效自上而下 解析不明确的左递归语法。ACL-IWPT,第109页-
想想它在做什么。假设我们有一个左递归产生式规则
a->Aa | b
,现在我们尝试匹配该规则。所以我们正在检查我们是否可以匹配A,但是为了做到这一点,我们必须首先检查我们是否可以匹配A。这听起来不可能,而且大多数情况下是这样。使用递归下降解析器,这显然表示无限递归

可以使用仍然是自顶向下的更高级技术,例如参见[1]或[2]

[1] :Richard A.Frost和Rahmatullah Ha fiz。一种新的自顶向下解析算法,以适应多项式时间内的歧义和左递归。SIGPLAN公告,41(5):46-542006。
[2] :R.Frost、R.Ha fiz和P.Callaghan,模块化且高效自上而下 解析不明确的左递归语法。ACL-IWPT,第109页-
1202007。

自顶向下的解析器无法处理左递归 自顶向下的解析器无法处理左递归结果。为了理解为什么不,让我们用一个非常简单的左递归语法。< /P>
  • → a
  • → 是的 只有一个令牌a和一个非终结符S。因此解析表只有一个条目。两个产品都必须进入该表条目

  • 问题是,在先行a上,解析器无法知道在先行a之后是否有另一个a。但是使用哪个产品取决于这些信息。

    自顶向下的解析器无法处理左递归 自顶向下的解析器无法处理左递归结果。为了理解为什么不,让我们用一个非常简单的左递归语法。< /P>
  • → a
  • → 是的 只有一个令牌a和一个非终结符S。因此解析表只有一个条目。两个产品都必须进入该表条目

  • 问题是,在先行a上,解析器无法知道在先行a之后是否有另一个a。但是使用哪一种产品取决于这些信息。

    您所指的两份文件是否有更完整的书目数据?@同上,这样更好吗?更完整,是:)您所指的两份文件是否有更完整的书目数据?@同上,这样更好吗?更完整,是:)