Compiler construction 从语法中删除左递归

Compiler construction 从语法中删除左递归,compiler-construction,grammar,left-recursion,Compiler Construction,Grammar,Left Recursion,从以下语法中删除左递归: 问题1 问题2 我知道删除左递归的规则,但我很困惑。因此,如果有人请张贴这个语法的答案,这将是有益的 根据评论更新: 我知道这2个是左递归语法: S -> SXY | a P -> P H 4 U | p 我知道如何从这些语法中删除左递归,但是其他语法呢 P -> P ... This is left recursive. P -> p ... Is this is also left recursive ? 首先,让我们把术语弄清楚:

从以下语法中删除左递归:

问题1

问题2

我知道删除左递归的规则,但我很困惑。因此,如果有人请张贴这个语法的答案,这将是有益的


根据评论更新:


我知道这2个是左递归语法:

S -> SXY | a
P -> P H 4 U | p 
我知道如何从这些语法中删除左递归,但是其他语法呢

P -> P ... This is left recursive. 
P -> p ... Is this is also left recursive ?

首先,让我们把术语弄清楚:你评论中的四行(我添加到问题中)是语法规则,而不是语法。每个只处理一个扩展;它们都不提供从起始符号S到一系列终端符号的路径

左递归规则是这样一种规则:对LHS(一个非终端符号(大写字母))的扩展会导致以相同符号开头的较长字符串。因此,P->P不是左递归的,因为规则没有意义P->P不是左递归的,因为它将非终端符号P扩展为终端符号P(小写)

前两条规则是左递归的,这是正确的


这能让你动起来吗?我相信它回答了您所有悬而未决的具体问题。

“我很困惑”不是问题描述。要求别人给你答案是欺骗。这是一个可以获得帮助的地方:告诉我们你在转换过程中走了多远,描述一下你的困境,我们会帮你渡过难关。我知道这两个是左递归语法:S->SXY | a和P->pH4u | P,我知道如何从这些语法中删除左递归,但其他语法呢,它是左递归还是非左递归?P->P->这是左递归的。P->P->这也是左递归的吗?
S -> SXY | a
P -> P H 4 U | p 
P -> P ... This is left recursive. 
P -> p ... Is this is also left recursive ?