编译原理消除左递归c语言,编译原理之消除左递归 - osc_ny7uj9zu的个人空间 - OSCHINA - 中文开源技术交流社区...

1.将以下文法消除左递归,分析符号串 i*i+i 。

并分别求FIRST集、FOLLOW集,和SELECT集

E -> E+T | T

T -> T*F | F

F -> (E) | i

消除左递归:

E -> TE'

E' -> +TE' | ε

T -> FT'

T' -> *FT' | ε

F -> (E) | i

分析i * i + i:

8c52c3c21438b0407e0e13a5d0ffc92a.png

FIRST集:

FIRST(E)=FIRST(T)=FIRST(F)={(,i}

FIRST(E’)= {+,ε}

FIRST(E’)= {+,ε}

FIRST(T’)={*,ε}

FOLLOW集:

FOLLOW(E)={),#}

FOLLOW(E')=FOLLOW(E)={),#}

FOLLOW(T)={+,),#}

FOLLOW(T’)= FOLLOW(T)= {+,),#}

FOLLOW(F)= {+,*,) ,#}

SELECT集:

SELECT(E -> TE')={(,i}

SELECT(E' -> +TE')={+}

SELECT(E' -> ε)={),#}

SELECT(T -> FT')={(,i}

SELECT(T' ->*FT' )={*}

SELECT()={T' ->ε}={+,),#}

SELECT( F -> (E))={(}

SELECT()={F ->i}={i}

2.文法改写,并分别求FIRST集、FOLLOW集,和SELECT集

(1) A -> aABe | a

B -> Bb | d

(2) S -> Aa | b

A -> SB

B -> ab

(1)

消除左递归:

A→aA'

A'→ABe| ε

B→dB'

B'→bB' | ε FIRST集:

FIRST(A)={a}

FIRST(A')={a,ε}

FIRST(B)={d}

FIRST(B')={b,ε}

FOLLOW集:

FOLLOW(A)={d,#}

FOLLOW(A')={d,#}

FOLLOW(B)={e}

FOLLOW(B')={e}

SELECT集:

SELECT(A→aA')={a}

SELECT(A'→ABe)={a}

SELECT(A'→ε)={d,#}

SELECT(B→dB')={d}

SELECT(B'→bB')={b}

SELECT(B'→ε)={e}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值