清华大学编译原理第二版课后习答案.docx

上传人:b****2 文档编号:1704633 上传时间:2022-10-23 格式:DOCX 页数:25 大小:29.32KB
下载 相关 举报
清华大学编译原理第二版课后习答案.docx_第1页
第1页 / 共25页
清华大学编译原理第二版课后习答案.docx_第2页
第2页 / 共25页
清华大学编译原理第二版课后习答案.docx_第3页
第3页 / 共25页
清华大学编译原理第二版课后习答案.docx_第4页
第4页 / 共25页
清华大学编译原理第二版课后习答案.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

清华大学编译原理第二版课后习答案.docx

《清华大学编译原理第二版课后习答案.docx》由会员分享,可在线阅读,更多相关《清华大学编译原理第二版课后习答案.docx(25页珍藏版)》请在冰豆网上搜索。

清华大学编译原理第二版课后习答案.docx

清华大学第二版编译原理答案

《编译原理》课后习题答案第一章

第 4 题

对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、

代码生成)报告的。

(1) else 没有匹配的if

(2) 数组下标越界

(3) 使用的函数没有定义

(4) 在数中出现非数字字符

答案:

(1) 语法分析

(2) 语义分析

(3) 语法分析

(4) 词法分析

《编译原理》课后习题答案第三章

第1 题

文法G=({A,B,S},{a,b,c},P,S)其中P 为:

S→Ac|aB

A→ab

B→bc

写出L(G[S])的全部元素。

答案:

L(G[S])={abc}

第2 题

文法G[N]为:

N→D|ND

D→0|1|2|3|4|5|6|7|8|9

G[N]的语言是什么?

答案:

G[N]的语言是V+。

V={0,1,2,3,4,5,6,7,8,9}

N=>ND=>NDD.... =>NDDDD...D=>D......D

或者:

允许0 开头的非负整数?

第3题

为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。

答案:

G[S]:

S->S+D|S-D|D

D->0|1|2|3|4|5|6|7|8|9

第4 题

已知文法G[Z]:

Z→aZb|ab

写出L(G[Z])的全部元素。

答案:

Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbb

L(G[Z])={anbn|n>=1}

第5 题

写一文法,使其语言是偶正整数的集合。

 要求:

(1) 允许0 打头;

(2)不允许0 打头。

答案:

(1)允许0 开头的偶正整数集合的文法

E→NT|D

T→NT|D

N→D|1|3|5|7|9

D→0|2|4|6|8

(2)不允许0 开头的偶正整数集合的文法

E→NT|D

T→FT|G

N→D|1|3|5|7|9

D→2|4|6|8

F→N|0

G→D|0

第6 题

已知文法G:

<表达式>:

:

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

<项>:

:

=<因子>|<项>*<因子>

<因子>:

:

=(<表达式>)|i

试给出下述表达式的推导及语法树。

(5)i+(i+i)

(6)i+i*i

答案:

<表达式>

<表达式> + <项>

<因子>

<表达式>

<表达式> + <项>

<因子>

i

<项>

<因子>

i

<项>

<因子>

i

( )

(5) <表达式>

=><表达式>+<项>

=><表达式>+<因子>

=><表达式>+(<表达式>)

=><表达式>+(<表达式>+<项>)

=><表达式>+(<表达式>+<因子>)

=><表达式>+(<表达式>+i)

=><表达式>+(<项>+i)

=><表达式>+(<因子>+i)

=><表达式>+(i+i)

=><项>+(i+i)

=><因子>+(i+i)

=>i+(i+i)

<表达式>

<表达式> + <项>

<项> * <因子>

<因子> i

<项>

<因子>

i

i

(6) <表达式>

=><表达式>+<项>

=><表达式>+<项>*<因子>

=><表达式>+<项>*i

=><表达式>+<因子>*i

=><表达式>+i*i

=><项>+i*i

=><因子>+i*i

=>i+i*i

第7 题

证明下述文法G[〈表达式〉]是二义的。

〈表达式〉∷=a|(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉

〈运算符〉∷=+|-|*|/

答案:

可为句子a+a*a 构造两个不同的最右推导:

最右推导1 〈表达式〉〈表达式〉〈运算符〉〈表达式〉

〈表达式〉〈运算符〉a

〈表达式〉* a

〈表达式〉〈运算符〉〈表达式〉* a

〈表达式〉〈运算符〉a * a

〈表达式〉+ a * a

a + a * a

最右推导2 〈表达式〉〈表达式〉〈运算符〉〈表达式〉

〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉

〈表达式〉〈运算符〉〈表达式〉〈运算符〉 a

〈表达式〉〈运算符〉〈表达式〉 * a

〈表达式〉〈运算符〉a * a

〈表达式〉+ a * a

a + a * a

第8 题

文法G[S]为:

S→Ac|aB

A→ab

B→bc

该文法是否为二义的?

为什么?

答案:

对于串abc

(1)S=>Ac=>abc 

(2)S=>aB=>abc

即存在两不同的最右推导。

所以,该文法是二义的。

或者:

对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。

S

a B

b c

S

A c

a b

第9 题

考虑下面上下文无关文法:

S→SS*|SS+|a

(1)表明通过此文法如何生成串aa+a*,并为该串构造语法树。

S

S S *

S S + a

a a

(2)G[S]的语言是什么?

答案:

(1)此文法生成串aa+a*的最右推导如下

S=>SS*=>SS*=>Sa*=>SS+a*=>Sa+a*=>aa+a*

(2)该文法生成的语言是:

*和+的后缀表达式,即逆波兰式。

第10 题

文法S→S(S)S|ε

(1) 生成的语言是什么?

(2) 该文法是二义的吗?

说明理由。

答案:

(1) 嵌套的括号

(2) 是二义的,因为对于()()可以构造两棵不同的语法树。

第11 题

令文法G[E]为:

E→T|E+T|E-T

T→F|T*F|T/F

F→(E)|i

证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。

答案:

此句型对应语法树如右,故为此文法一个句型。

或者:

因为存在推导序列:

 E=>E+T=>E+T*F,所

以 E+T*F 句型

此句型相对于E 的短语有:

E+T*F;相对于T 的短语

有T*F

直接短语为:

T*F

句柄为:

T*F

第13 题

一个上下文无关文法生成句子abbaa 的推导树如下:

(1)给出串abbaa 最左推导、最右推导。

(2)该文法的产生式集合P 可能有哪些元素?

(3)找出该句子的所有短语、直接短语、句柄。

B

a

S

A B S

a

S B A

ε b b a

答案:

(1)串abbaa 最左推导:

S=>ABS=>aBS=>aSBBS=>aBBS=>abBS=>abbS=>abbAa=>abbaa

最右推导:

S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Abbaa=>abbaa

(2)产生式有:

S→ABS |Aa|ε A→a B→SBB|b

可能元素有:

ε aa ab abbaa aaabbaa ……

(3)该句子的短语有:

a 是相对A 的短语

ε 是相对S 的短语

b 是相对B 的短语

εbb 是相对B 的短语

aa 是相对S 的短语

aεbbaa 是相对S 的短语

直接短语有:

a ε b

句柄是:

a

《编译原理》课后习题答案第四章

第1 题

构造下列正规式相应的DFA.

(1) 1(0|1) *101

(2) 1(1010*|1(010)*1)*0

(3) a((a|b)*|ab*a)*b

(4) b((ab)*|bb)*ab

答案:

(1) 先构造NFA:

用子集法将NFA 确定化

. 0 1

X . A

A A AB

AB AC AB

AC A ABY

ABY AC AB

除X,A 外,重新命名其他状态,令AB 为B、AC 为C、ABY 为D,因为D 含有Y(NFA

的终态),所以D 为终态。

. 0 1

X . A

A A B

B C B

C A D

D C B

DFA 的状态图:

:

(2)先构造NFA:

X 1 A

ε B

1 C 0 D 1 E

0

ε

F 1 G 0 H 1 I 0 J 1 K

L

ε ε

0

Y

ε

ε

ε

ε

用子集法将NFA 确定化

ε 0 1

X X

T0=X A

A ABFL

T1= ABFL Y CG

Y Y

CG CGJ

T2= Y

T3= CGJ DH K

DH DH

K ABFKL

T4= DH EI

EI ABEFIL

T5= ABFKL Y CG

T6= ABEFIL EJY CG

EJY ABEFGJLY

T7= ABEFGJLY EHY CGK

EHY ABEFHLY

CGK ABCFGJKL

T8= ABEFHLY EY CGI

EY ABEFLY

CGI CGJI

T9= ABCFGJKL DHY CGK

DHY DHY

T10= ABEFLY EY CG

T11= CGJI DHJ K

DHJ DHJ

T12= DHY EI

T13= DHJ EIK

EIK ABEFIKL

T14= ABEFIKL EJY CG

将T0、T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14重新命名,分别用0、

1、2、3、4、5、6、7、8、9、10、11、12、13、14 表示。

因为2、7、8、10、12 中含有Y,

所以它们都为终态。

0 1

0 1

1 2 3

2

3 4 5

4 6

5 2 3

6 7 3

7 8 9

8 10 11

9 12 9

10 10 3

11 13 5

12 6

13 14

14 7 3

0 1 0

12

1 2

7

10 8

3

4

5

6

9

11 13 14

1

1

0

1

0

1

0

1

1

0

1

1

0

1

0

1

0 1

0

1

0

1

(3) 先构造NFA:

先构造NFA:

X a A

ε B

a,b

ε

D a E a F

C

ε

Y

ε

ε

b

ε

b

用子集法将NFA 确定化

ε a b

X X

T0=X A

A ABCD

T1=ABCD BE BY

BE ABCDE

BY ABCDY

T2=ABCDE BEF BEY

BEF ABCDEF

BEY ABCDEY

T3=ABCDY BE BY

T4=ABCDEF BEF BEY

T5=ABCDEY BEF BEY

将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5 表示。

因为3、5 中含有Y,

所以它们都为终态。

a b

0 1

1 2 3

2 4 5

3 2 3

4 4 5

5 4 5

0 a 1 b 3

2

a

5

a 4

b

a

b

a

b

a

b

(4) 先构造NFA:

X A

b

ε B

a

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

当前位置:首页 > 解决方案 > 学习计划

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

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