编译原理 第5章习题解答

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五章习题解答

5.1 设一NDPDA识别由下述CFG定义的语言,试给出这个NDPDA的完整形式描述。

S→SASC

S→ε

A→Aa

A→b

C→DcD

D→d

5.2 消除下列文法的左递归:

① G[A]:

A→BX∣CZ∣W

B→Ab∣Bc

C→Ax∣By∣Cp

② G[E]:

E→ET+∣ET–∣T

T→TF*∣TF/F

F→(E)∣i

③ G[X]:

X→Ya∣Zb∣c

Y→ Zd∣Xe∣f

Z→X e∣Yf∣a

④ G[A]:

A→Ba|Aa|c

B→Bb|Ab|d

5.3 设文法G[<语句>]:

<语句>→<变量>: = <表达式>|if<表达式>then<语句>

|if<表达式>then<语句>else<语句> <变量>→i

<表达式>→<项>|<表达式>+<项>

<项>→<因子>|<项>*<因子>

<因子>→<变量>|′(′<表达式>′)′

试构造该文法的递归下降子程序。

5.4 设文法G[E]:

E→ TE'

E'→ + E∣ε

T→ FT'

T'→ T∣ε

F→ PF'

F'→ *F∣ε

P→ (E)∣ a∣^

①构造该文法的递归下降分析程序;

②求该文法的每一个非终结符的FIRST集合和FOLLOW集合;

③构造该文法的LL(1)分析表,并判断此文法是否为LL(1)文法。

5.5 设文法G[S]:

S→ SbA∣aA

B→ Sb

A→ Bc

①将此文法改写为LL(1)文法;

②求文法的每一个非终结符的FIRST集合和FOLLOW集合;

③构造相应的LL(1)分析表。

5.6 设文法G[S]:

S→ aABbcd∣ε

A→ ASd∣ε

B→ SAh∣eC∣ε

C→ Sf∣Cg∣ε

D→ aBD∣ε

①求每一个非终结符的FOLLOW集合;

②对每一个非终结符的产生式选择,构造FIRST集合;

③该文法是LL(1)文法。

5.7 设文法G[E]:

E→ Aa∣Bb

A→ cA∣eB

B→ bd

试画出其自上而下分析程序框图。

第五章习题参考答案

5.1 解:NDPDA M=(Q,∑,H,δ,q0,F,Z0)

Q={q}

∑={a,b,c,d}

H={S,A,C,D,a,b,c,d}

q0=q

F={q}

Z0=S

δ: δ(q,ε,S)={(q,SASC),(q,ε)}

δ(q,ε,A)={(q,Aa),(q,b)}

δ(q,ε,C)={(q,DCD)}

δ(q,ε,D)={(q,d)}

δ(q,a,a)=(q,ε)

δ(q,b,b)=(q,ε)

δ(q,c,c)=(q,ε)

δ(q,d,d)=(q,ε)

5.2 解:

①利用消除左递归的算法,将非终结符排序为U1=A,U2=B,U3=C,

则i=1,j=0时,对文法无影响。

i=2,j=1时,因为U i=B→Ab,U j=A→Bx|Cz|w

所以将B改写为B→Bxb|Czb|wb|Bc

消除产生式B的左递归:

B→CzbB′|wbB′

B′→xbB′|cB′| ε

i=3,j=1时,因为U i=C→Ax,U j=A→Bx|Cz|w

所以将C改写为C→Bxx|Czx|wx|By|Cp

j=2时,因为U i=C→Bxx|By,U j=B→CzbB′|wbB′

所以将产生式C改写为

C→CZbB′xx|CzbB′y|wbB′xx|wbB′y|Czx|wx|Cp

消除产生式C的左递归:

C→wbB′xxC′|wbB′yC′|wxC′

C′→zbB′xxC′|zbB′yC′|zxC′|pC′| ε

所以,文法消除左递归后变为

A→Bx|Cz|w

B→CzbB′|wbB′

B′→xbB′|cB′|ε

C→wbB′xxC′|wbB′yC′|wxC′

C′→zbB′xxC′|zbB′yC′|zxC′|pC′|ε

②利用消除左递归的算法,将非终结符排序为:U1=E,U2=T,U3=F

则 i=1,j=0时,无代入。

消除产生式E的左递归:

E→T{(T+|T-)}

i=2,j=1时,无代入。

消除产生式T的左递归:

T→{F*|F/F}

i=3,j=1时,无代入,也无产生式左递归,不改写产生式。

所以,文法消除左递归后变为

E→T{(T+|T-)}

T→{F*|F/F}

F→(E)|I

③利用消除左递归的算法,将非终结符排序为: U1=X,U2=Y,U3=Z

则 i=1,j=0时,无代入

i=2,j=1时,因为U i=Y→Zd|Xe|f,U j=X→Ya|Zb|c

所以将Y改写为 Y→Zd|Yae|Zbe|ce|f

消除左递归,得到 Y→ZdY′|ZbeY′|ceY′|fY′ Y′→aeY′|ε

i=3,j=1时,因为U i=Z→Xe|Yf|a,U j=X→Ya|Zb|c

所以将Z改写为Z→Yae|Zbe|ce|Yf|a j=2时, U i=Z→Yae|Yf, U j= Y→ZdY′|ZbeY′|ceY′|fY′

相关文档
最新文档