编译原理(河工程)练习4

1. (简答题, 50分)已知文法 G[S]: S→MH|a

                         H→LSo|ε

                         K→dML|ε

                         L→eHf

                        M→K|bLM

(1)计算文法的每个非终结符的FIRST集和FOLLOW集。

(2)判断 G 是否是 LL(1)文法,如果是,构造 LL(1)分析表。

正确答案:

非终结符

FIRST 集

FOLLOW 集

S

{a,d,b,ε,e}

{#,o}

M

{d,ε,b}

{e,#,o}

H

{ε,e}

{#,f,o}

L

{e}

{a,d,b,e,o,#}

K

{d,ε}

{e,#,o}

a

o

d

e

f

b

#

S

S→a

S→MH

S→MH

S→MH

S→MH

S→MH

M

M→K

M→K

M→K

M→bLM

M→K

H

H→ε

H→LSo

H→ε

H→ε

L

L→eHf

K

K→ε

K→dML

K→ε

K→ε

由预测分析表中无多重入口也可判定文法是 LL(1)的。

2. (简答题, 50分)    对于一个文法若消除了左递归,提取了左公共因子后是否一定为 LL(1)文法?试对下面文法进行改写,并对改写后的文法进行判断。

(1) G(A):A→baB|ε

                B→Abb|a

(2) G(A):A→aABe|a 

                B→Bb|d

正确答案:

答案:(1)先改写文法为:G(A):A→baB  A→ε

                               B→baBbb  B→bb  B→a

再改写文法为:G(A):A→baB A→ε

B→bB’ B→a

B’→aBbb  B’→b

        FIRST集和FOLLOW集:

FIRST

FOLLOW

A

{b,ε}

{#}

B

{b,a}

{#,b}

B’

{b,a}

{#,b }

     预测分析表:

a

b

#

A

A→baB

A→ε

B

B→a

B→bB’

B’

B’→aBbb

B’→b

预测分析表中无多重入口,所以是LL(1)文法。

(2) 文法:G(A):A→aABe|a

                     B→Bb|d

提取左公共因子和消除左递归后文法变为:

G(A):A→aA’    

A’→ABe  A’→ε

B→dB’

B’→bB’  B’→ε

非终结符

FIRST 集

FOLLOW 集

A

{a}

{#,d}

B

{d}

{e}

A’

{a,ε}

{#,d}

B’

{b,ε}

{e}

因为:

FIRST(A B e)∩FOLLOW(A’) ={ a }∩ {#,d }=Ø      

  FIRST(b B’)∩FOLLOW(B’) ={ b }∩ { e }=Ø

所以文法是 LL(1)的。

预测分析表(Predicting Analysis Table) 

a

e

b

d

#

A

A→a A’

B

B→d B’

B’

B’→ε

B’→b B’

A’

A’→ABe

A’→ε

A’→ε

也可由预测分析表中无多重入口判定文法是 LL(1)的。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值