编译原理****题
软件工程学科基础课
设有文法G(A):
A → BaC|CbB
B → Ac|c
C → Bb|b
试消除G(A)的左递归。
【解】
首先将文法的非终结符排序:A、B、C
对于A,不存在直接左递归,将A代入B,得到B的新的规则:
B →|CbBc|c
可见,B存在直接左递归。
消除B的直接左递归,则有:
B → CbBcB’|cB’
B’→ aCcB’|ε
将B代入C,得到C的新规则:
C → CbBcB’b|cB’ b|b
可见,C存在直接左递归。同样,消除C的左递归,则得到:
C → cB’bC’|bC’
C’→ bBcB’bC’|ε
这样,消除左递归后的文法如下:
A → BaC|CbB
B → CbBcB’|cB’
B’→ aCcB’|ε
C → cB’bC’|bC’
C’→ bBcB’bC’|ε
将下面的左递归文法G(S)改为非左递归的。
S → SaP|Sf |P
P → QbP|Q
Q → cSd|e
【解】
S → PS’
S’→ aPS’| f S’|ε
P → QbP|Q
Q → cSd|e
4-7、4-8
课后作业
编译原理习题 4 来自淘豆网www.taodocs.com转载请标明出处.