编译原理第二次小作业.docx

上传人:b****8 文档编号:11462910 上传时间:2023-03-01 格式:DOCX 页数:13 大小:227.24KB
下载 相关 举报
编译原理第二次小作业.docx_第1页
第1页 / 共13页
编译原理第二次小作业.docx_第2页
第2页 / 共13页
编译原理第二次小作业.docx_第3页
第3页 / 共13页
编译原理第二次小作业.docx_第4页
第4页 / 共13页
编译原理第二次小作业.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

编译原理第二次小作业.docx

《编译原理第二次小作业.docx》由会员分享,可在线阅读,更多相关《编译原理第二次小作业.docx(13页珍藏版)》请在冰豆网上搜索。

编译原理第二次小作业.docx

编译原理第二次小作业

Homework2

向首兴

2014013421

1.对于一个文法若消除了左递归、提取了左公因子后是否一定为LL

(1)文法?

试对下面文法进行改写,并对改写后的文法进行判断。

(1)A→aABe|a

B→Bb|d

答:

对该文法消除左递归:

B→Bb|d=>B→dC

C→bC|ε

对该文法提取左公因子:

A→aABe|a=>A→aD

D→ABe|ε

改写后的文法:

A→aD

B→dC

C→bC|ε

D→ABe|ε

First(A)={a}Follow(A)={d,#}

First(B)={d}Follow(B)={e}

First(C)={b,ε}Follow(C)={e}

First(D)={a,ε}Follow(D)={d,#}

ForC:

First(bC)∩First(ε)={b}∩{ε}=Ø

First(bC)∩Follow(C)={b}∩{e}=Ø

ForD:

First(ABe)∩First(ε)={a}∩{ε}=Ø

First(ABe)∩Follow(D)={a}∩{d,#}=Ø

由上验证:

该文法是LL

(1)文法。

(2)S→Ab|Ba

A→aA|a

B→a

答:

该文法没有左递归;

对该文法提取左公因子:

A→aA|a=>A→aC

C→A|ε

改写后的文法:

S→Ab|Ba

A→aC

B→a

C→A|ε

First(S)={a}Follow(S)={#}

First(A)={a}Follow(A)={b}

First(B)={a}Follow(B)={a}

First(C)={a,ε}Follow(C)={b}

ForS:

First(Ab)∩First(Ba)={a}∩{a}={a}

由上验证:

该文法不是LL

(1)文法。

2.给定文法G(S):

S→a|^|(T)

T→T,S|S

写出如下句型的最左归约。

(1)(a,a)

答:

(a,a)→(S,a)→(T,a)→(T,S)→(T)→S

(2)(a,(a,a))

答:

(a,(a,a))→(S,(a,a))→(T,(a,a))→(T,(S,a))→(T,(T,a))→(T,(T,S))→(T,(T))→(T,S)

→(T)→S

(3)(((a,a),^,(a)),a)

答:

(((a,a),^,(a)),a)→(((S,a),^,(a)),a)→(((T,a),^,(a)),a)→(((T,S),^,(a)),a)→(((T),^,(a)),a)

→((S,^,(a)),a)→((T,^,(a)),a)→((T,S,(a)),a)→((T,(a)),a)→((T,(S)),a)→((T,(T)),a)

→((T,S),a)→((T),a)→(S,a)→(T,a)→(T,S)→(T)→S

3.给定文法G(S):

S→aAb

A→BcA|B

B→idt|ε

请分别写出下列句型的句柄。

(1)aidtcBcAb

答:

树形图如下:

句柄:

BcA

(2)aidtccb

答:

树形图如下:

句柄:

ε

(3)ab

答:

树形图如下:

黄色部分即为句柄:

ε

(4)aidtb

答:

树形图如下:

句柄:

ε或idt

4.写出如下文法的LR(0)项目集规范族。

(1)S→aS|bS|a

答:

设该文法的拓广文法为:

S'→S

S→aS|bS|a

如下计算其LR(0)项目集规范族:

C:

={CLOSURE({S'→.S})}

Repeat

ForC中每一项目集I和每一文法符号X

DoifGO(I,X)非空且不属于C

Then把GO(I,X)放入C中

UntilC不再增大

计算流程:

C:

={CLOSURE({S'→.S,S→.aS,S→.bS,S→.a})}

C:

={CLOSURE({S'→.S,S→.aS,S→.bS,S→.a}),

CLOSURE({S'→S.}),

CLOSURE({S→a.S,S→a.,S→.aS,S→.bS,S→.a}),

CLOSURE({S→b.S,S→.aS,S→.bS,S→.a}),

CLOSURE({S→aS.}),

CLOSURE({S→bS.}),

}

所以项目集规范族为:

C:

={CLOSURE({S'→.S,S→.aS,S→.bS,S→.a}),

CLOSURE({S'→S.}),

CLOSURE({S→a.S,S→a.,S→.aS,S→.bS,S→.a}),

CLOSURE({S→b.S,S→.aS,S→.bS,S→.a}),

CLOSURE({S→aS.}),

CLOSURE({S→bS.}),

}

(2)S→(L)|a

L→L,S|S

答:

设该文法的拓广文法为:

S'→S

S→(L)|a

L→L,S|S

计算流程:

C:

={CLOSURE({S'→.S,S→.(L),S→.a})}

C:

={CLOSURE({S'→.S,S→.(L),S→.a}),

CLOSURE({S'→S.}),

CLOSURE({S→(.L),L→.L,S,L→.S,S→.(L),S→.a}),

CLOSURE({S→a.}),

CLOSURE({S→L.,S,S→(L.)}),

CLOSURE({L→S.}),

CLOSURE({S→L,.S,S→.(L),S→.a}),

CLOSURE({S→(L).}),

CLOSURE({S→L,S.})

}

所以项目集规范族为:

C:

={CLOSURE({S'→.S,S→.(L),S→.a}),

CLOSURE({S'→S.}),

CLOSURE({S→(.L),L→.L,S,L→.S,S→.(L),S→.a}),

CLOSURE({S→a.}),

CLOSURE({S→L.,S,S→(L.)}),

CLOSURE({L→S.}),

CLOSURE({S→L,.S,S→.(L),S→.a}),

CLOSURE({S→(L).}),

CLOSURE({S→L,S.})

}

5.写出如下文法的LR(0)自动机。

S→SS|(S)|a

答:

该文法的拓广文法的LR(0)自动机的状态表如下:

L0

S'→.SS→.SSS→.(S)S→.a

L1

S'→S.S→S.SS→.SSS→.(S)S→.a

L2

S→(.S)S→.SSS→.(S)S→.a

L3

S→a.

L4

S→SS.S→S.SS→.SSS→.(S)S→.a

L5

S→(S.)S→S.SS→.SSS→.(S)S→.a

L6

S→(S).

该文法的拓广文法的LR(0)自动机的状态转移表如下:

(#-起始状态,*-终结状态)

S

a

#L0

L1

L2

——

L3

*L1

L4

L2

——

L3

L2

L5

L2

——

L3

*L3

——

——

——

——

*L4

L4

L2

——

L3

L5

L4

L2

L6

L3

*L6

——

——

——

——

 

6.试为如下文法构造SLR

(1)语法分析表,要求画出LR(0)自动机。

bexpr→bexprorbterm|bterm

bterm→btermandbfactor|bfactor

bfactor→notbfactor|(bexpr)|true|false

说明:

bexpr,bterm,和bfactor为非终结符,其它符号为终结符。

答:

令S=bexpr,A=bterm,B=bfactor.

该文法的拓广文法为:

(1)S'→S

(2)S→SorA

(3)S→A

(4)A→AandB

(5)A→B

(6)B→notB

(7)B→(S)

(8)B→true

(9)B→false

First(S')={not,(,true,false}Follow(S')={#}

First(S)={not,(,true,false}Follow(S)={#,or,)}

First(A)={not,(,true,false}Follow(A)={#,or,),and}

First(B)={not,(,true,false}Follow(B)={#,or,),and}

LR(0)自动机的状态表如下:

(#-起始状态,*-终结状态)

L0

S'→.SS→.SorAS→.AA→.AandBA→.B

B→.notBB→.(S)B→.trueB→.false

*L1

S'→S.S→S.orA

*L2

S→A.A→A.andB

*L3

A→B.

L4

B→not.BB→.notBB→.(S)B→.trueB→.false

L5

B→(.S)S→.SorAS→.AA→.AandBA→.B

B→.notBB→.(S)B→.trueB→.false

*L6

B→true.

*L7

B→false.

L8

S→Sor.AA→.AandBA→.B

B→.notBB→.(S)B→.trueB→.false

L9

A→Aand.BB→.notB

B→.(S)B→.trueB→.false

*L10

B→notB.

L11

B→(S.)S→S.orA

*L12

S→SorA.A→A.andB

*L13

A→AandB.

*L14

B→(S).

 

SLR

(1)语法分析表如下:

栈顶状态

ACTION

GOTO

or

and

not

true

false

#

S

A

B

0

s4

s6

s7

s5

1

2

3

1

s8

acc

2

r3

s9

r3

r3

3

r5

r5

r5

r5

4

s4

s6

s7

s5

10

5

s4

s6

s7

s5

11

2

3

6

r8

r8

r8

r8

7

r9

r9

r9

r9

8

s4

s6

s7

s5

12

3

9

s4

s6

s7

s5

13

10

r6

r6

r6

r6

11

s8

s14

12

r2

s9

r2

r2

13

r4

r4

r4

r4

14

r7

r7

r7

r7

LR(0)自动机如下:

(绿色:

起始状态;蓝色:

指针;黄色:

终结状态)

7.证明文法

S→AaAb|BbBa

A→ε

B→ε

是LL

(1)文法,但不是SLR

(1)文法。

答:

First(S)={a,b}Follow(S)={#}

First(A)={ε}Follow(A)={a,b}

First(B)={ε}Follow(B)={a,b}

ForS:

First(AaAb)∩First(BbBa)={a}∩{b}=Ø

由上验证:

该文法是LL

(1)文法。

下证该文法不是SLR

(1)文法:

该文法的拓广文法为:

(1)S'→S

(2)S→AaAb

(3)S→BbBa

(4)A→ε

(5)B→ε

LR(0)自动机如下:

(绿色:

起始状态;蓝色:

指针;黄色:

终结状态)

SLR

(1)语法分析表如下:

栈顶状态

ACTION

GOTO

a

b

#

S

A

B

0

r4,r5

r4,r5

1

2

3

1

acc

2

s7

3

s4

4

r5

r5

5

5

s6

6

r3

7

r4

r4

8

8

s9

9

r2

由上分析表中存在表项为多重定义,该文法不是SLR

(1)文法。

故该文法是LL

(1)文法,但不是SLR

(1)文法,得证。

 

感谢您的耐心阅读

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1