消除此间接左递归

时间:2013-06-17 02:10:24

标签: parsing compiler-construction grammar computation-theory

以下语法已经离开了递归。

X是开始辛博尔。

X -> Xa | Zb
Z -> Zc | d | Xa

如何删除它?请逐步解释。

1 个答案:

答案 0 :(得分:2)

-- remove Z left recursion--

X -> Xa | Zb
Z -> dZ' | XaZ'
Z' -> cZ' | empty

--next remove Z --

X -> Xa | dZ'b | XaZ'b
Z' -> cZ' | empty

--next factorize X--

X -> XaX' | dZ'b
X'-> Z'b | empty
Z'-> cZ' | empty

--next remove X recursion--

X -> dZ'bX''
X'' -> a X'X'' | empty
X' -> Z'b | empty
Z' -> cZ' | empty