Parsing 消除这种间接的左递归

Parsing 消除这种间接的左递归,parsing,compiler-construction,grammar,computation-theory,Parsing,Compiler Construction,Grammar,Computation Theory,下面的语法留下了递归 X是开始符号 X -> Xa | Zb Z -> Zc | d | Xa 如何删除它?请逐步解释。首先考虑 z < /代码>然后>代码> x。 -- 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 --nex

下面的语法留下了递归

X是开始符号

X -> Xa | Zb
Z -> Zc | d | Xa
如何删除它?请逐步解释。

首先考虑<代码> z < /代码>然后>代码> x<代码>。
-- 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