从语法

时间:2016-03-03 00:06:38

标签: compiler-construction grammar left-recursion

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

Q.1

S -> SXY | a
X -> xY | xX
Y -> Yy | epsilon

Q.2

P ->  P H 4 U | p
H -> h
U -> u | u P

我知道删除左递归的规则,但我很困惑。所以如果有人请发表这个语法的答案,那将会很有帮助。

评论更新:

我知道这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 个答案:

答案 0 :(得分:0)

首先,让我们直截了当地说明术语:评论中的四行(我在问题中添加)是语法规则,而不是语法。每个只处理一个扩展;它们都没有提供从起始符号 S 到一串终端符号的路径。

左递归规则是指LHS(非终端符号(大写字母))的扩展可以产生以相同符号开头的较长字符串。因此, P - > P 不是左递归的,因为规则毫无意义。 P - > p 不是左递归的,因为它将 P (一个非终端符号)扩展为 p (小写),一个终端符号。

你是正确的,前两个规则是左递归的。

这会让你感动吗?我相信它会回答您所有出色的具体问题。