消除左递归

来源:互联网 发布:时间同步服务器软件 编辑:程序博客网 时间:2024/04/30 22:35

参考关健Young的博客,网址:http://blog.sina.com.cn/s/blog_687911280100nc8t.html

左递归形式为:

1)A→Aβ,A∈VN,β∈V*

2)A→Bβ,B→Aα,A、B∈VN,α、β∈V*

称其为左递归。


其中可以采取修改左递归为右递归:

A→Aβ|γ。其中β非空,γ不以A打头

可写为:A→γA'

                A'→βA'|ε


即:

A→Aα1| Aα2 ||Aαm12|n

其中,αi(1≤i≤m)均不为空,βj(1≤j≤n)均不以A打头。

则消除直接左递归后改写为:

A→ β1A'| β2 A' || βnA'

A'→ α1A' | α2A' || αmA'|ε


例4.12:有文法G(E):

E→E +T |T

T→T*F | F

F→i| (E)

消除该文法的直接左递归。

解:按转换规则,可得:

E→TE'

E'→+TE'|ε

T→FT '

T'→*FT'|ε

F→i| (E)


腾讯实例:

S->Aa|b A->Ac|Sd|e,消除左递归

左递归消除方法如下:其中e为空集

U=Ux1|Ux2|y1|y2--àU=y1U’|y2U’ U’=x1U’|x2U’|e

故此为:A->Ac|Sd|e

A=Ac|Aad|bd|e ---àA=bdA’|A’  A’=cA’|adA’|e





0 0