编译原理第二版课后习答案doc.docx

上传人:b****6 文档编号:12791239 上传时间:2023-06-08 格式:DOCX 页数:50 大小:28.78KB
下载 相关 举报
编译原理第二版课后习答案doc.docx_第1页
第1页 / 共50页
编译原理第二版课后习答案doc.docx_第2页
第2页 / 共50页
编译原理第二版课后习答案doc.docx_第3页
第3页 / 共50页
编译原理第二版课后习答案doc.docx_第4页
第4页 / 共50页
编译原理第二版课后习答案doc.docx_第5页
第5页 / 共50页
编译原理第二版课后习答案doc.docx_第6页
第6页 / 共50页
编译原理第二版课后习答案doc.docx_第7页
第7页 / 共50页
编译原理第二版课后习答案doc.docx_第8页
第8页 / 共50页
编译原理第二版课后习答案doc.docx_第9页
第9页 / 共50页
编译原理第二版课后习答案doc.docx_第10页
第10页 / 共50页
编译原理第二版课后习答案doc.docx_第11页
第11页 / 共50页
编译原理第二版课后习答案doc.docx_第12页
第12页 / 共50页
编译原理第二版课后习答案doc.docx_第13页
第13页 / 共50页
编译原理第二版课后习答案doc.docx_第14页
第14页 / 共50页
编译原理第二版课后习答案doc.docx_第15页
第15页 / 共50页
编译原理第二版课后习答案doc.docx_第16页
第16页 / 共50页
编译原理第二版课后习答案doc.docx_第17页
第17页 / 共50页
编译原理第二版课后习答案doc.docx_第18页
第18页 / 共50页
编译原理第二版课后习答案doc.docx_第19页
第19页 / 共50页
编译原理第二版课后习答案doc.docx_第20页
第20页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

编译原理第二版课后习答案doc.docx

《编译原理第二版课后习答案doc.docx》由会员分享,可在线阅读,更多相关《编译原理第二版课后习答案doc.docx(50页珍藏版)》请在冰点文库上搜索。

编译原理第二版课后习答案doc.docx

编译原理第二版课后习答案doc

 

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

第1章引论

第1题

解释下列术语:

编译程序

源程序

目标程序

编译程序的前端

后端

其各部分的主要功能筒述如下。

输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。

检查源程序中存在的形式语法错误,输出错误处理信息。

进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表

(1)

(2)

(3)

(4)

(5)

(6)

答案:

(1)编译程序:

如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。

(2)源程序:

源语言编写的程序称为源程序。

(3)目标程序:

目标语言书写的程序称为目标程序。

(4)编译程序的前端:

它由这样一些阶段组成:

这些阶段的工作主要依赖于源语言而与目标机无关。

通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶

段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。

(5)后端:

指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。

(6)遍:

是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

第2题

—•个典型的编译程序通常由哪些部分组成?

各部分的主要功能是什么?

并画出编译程序的总体结构图。

答案:

一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。

词法分析程序:

语法分析程序:

语义分析程序:

中。

中间代码生成程序:

按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

中间代码优化程序:

为了产生高质量的F1标代码,对中间代码进行等价变换处理。

目标代码生成程序:

将优化后的中间代码程序转换成目标代码程序。

表格管理程序:

负责建立、填写和杏找等一系列表格工作。

表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。

可以说整个编译过程就是造表、查表的工作过程。

需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序具有的表格管理功能。

错误处理程序:

处理和校正源程序中存在的词法、语法和语义错误。

当编译程序发现源程序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误进行适当的校正(修复),目的是使编译程序能够继续向下进行分析和处理。

注意:

如果问编译程序有哪些主要构成成分,只要回答六部分就可以。

如果搞不清楚,就回答八部分。

第3题

何谓翻译程序、编译程序和解释程序?

它们三者之间有何种关系?

答案:

翻译程序是指将用某种语言编写的程序转换成另-•种语言形式的程序的程序,如编译程

序和汇编程序等°

编译程序是把用高级语言编写的源程序转换(加工)成与之等价的另一种用低级语言编写的目标程序的翻译程序。

解释程序是解释、执行高级语言源程序的程序。

解释方式一般分为两种:

一种方式是,源程序功能的实现完全由解释程序承担和完成,即每读出源程序的一条语句的第一个单词,则依据这个单词把控制转移到实现这条语句功能的程序部分,该部分负责完成这条语句的功能的实现,完成后返回到解释程序的总控部分再读人下一条语句继续进行解释、执行,如此反复;另一种方式是,一边翻译一边执行,即每读出源程序的一条语句,解释程序就将其翻译成•一段机器指令并执行之,然后再读人下一条语句继续进行解释、执行,如此反复。

无论是哪种方式,其加工结果都是源程序的执行结果。

目前很多解释程序采取上述两种方式的综合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行中间代码程序,最后得到运行结果。

广义上讲,编译程序和解释程序都属于翻译程序,但它们的翻译方式不同,解释程序是边翻译(解释)边执行,不产生目标代码,输出源程序的运行结果。

而编译程序只负责把源程序翻译成目标程序,输出与源程序等价的目标程序,而目标程序的执行任务由操作系统来完成,即只翻译不执行。

第4题

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

代码生成)报告的。

(1)else没有匹配的if

(2)数组下标越界

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

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

答案:

(1)语法分析

(2)语义分析

(3)语法分析

(4)词法分析

第5题

编译程序大致有哪儿种开发技术?

答案:

(1)自编译:

用某一高级语言书写其本身的编译程序。

(2)交又编译:

A机器上的编译程序能产生B机器上的目标代码。

(3)自展:

首先确定一个非常简单的核心语言L0,用机器语言或汇编语言书写出它的编译程序TO,再把语言L0扩充到L1,此时L0UL1,并用L0编写L1的编译程序T1,再把语言L1扩充为L2,有LIL2,并用L1编写L2的编译程序T2,……,如此逐步扩展卜'去,

好似滚雪球一样,直到我们所要求的编译程序。

(4)移植:

将A机器上的某高级语言的编译程序搬到B机器上运行。

第6题

计算机执行用高级语言编写的程序有哪些途径?

它们之间的主要区别是什么?

答案:

计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。

像Basic之类的语言,属于解释型的高级语言。

它们的特点是计算机并不事先对高级语言进行全盘翻译,将其变为机器代码,而是每读入一条高级语句,就用解释器将其翻译为一条机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如此反复。

总而言之,是边翻译边执行。

像C,PascalZ类的语言,属于编译型的高级语言。

它们的特点是计算机事先对高级语言进行全盘翻译,将其全部变为机器代码,再统一执行,即先翻译,后执行。

从速度上看,编译型的高级语言比解释型的高级语言更快。

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

第2章PLQ编译程序的实现

第1题

PLQ语言允许过程嵌套定义和递归调用,试问它的编译程序如何解决运行时的存储管理。

答案:

PLQ语言允许过程嵌套定义和递归调用,它的编译程序在运行时采用了栈式动态存储管理。

(数组CODE存放的只读目标程序,它在运行时不改变。

)运行时的数据区S是由解释程序定义的一维整型数组,解释执行时对数据空间,的管理遵循后进先出规则,当每个过程(包括主程序)被调用时,才分配数据空间,退出过程时,则所分配的数据空间被释放。

应用动态链和静态链的方式分别解决递归调用和非局部变量的引用问题。

第2题

若PLQ编译程序运行时的存储分配策略采用栈式动态分配,并用动态链和静态链的方式分别解决递归调用和非局部变量的引用问题,试写出下列程序执行到斌值语句b:

=10时运行栈的布局示意图。

varx,y;

procedurep;

vara;

procedureq;

varb;

begin(q)

b:

=10;

end(q);

procedures;

varc,d;

procedurer;

vare,f;

begin(r)

callq;

end(r);

begin(s)

callr;

end(s);

begin(p)

calls;

end(p);

begin(main)

callp;

end(main).

答案:

程序执行到赋值语句b:

=10时运行栈的布局示意图为:

第3题

写出题2中当程序编译到r的过程体时的名字表table的内容。

namekindlevel/valadrsize

答案:

题2中当程序编译到r的过程体时的名字表table的内容为:

namekindlevel/valadrsize

xvariable0dx

yvariable0dx+1

pprocedure0过程p的入口(待填)5

avariable1dx

qprocedure1过程q的入口4

sprocedure1过程s的入口(待填)5

cvariable2dx

dvariable2dx

rprocedure2过程r的入口5

evariable3dx

fvariable3dx+1

注意:

q和s是并列的过程,所以q定义的变量b被覆盖。

第4题

指出栈顶指针T,最新活动记录基地址指针B,动态链指针DL,静态链指针SL与返回地址RA的用途。

答案:

栈顶指针T,最新活动记录基地址指针B,动态链指针DL,静态链指针SL与返回地址

RA的用途说明如下:

T:

栈顶寄存器T指出了当前栈中最新分配的单元(T也是数组S的下标)。

B:

基址寄存器,指向每个过程被调用时,在数据区S中给它分配的数据段起始地址,也称基地址。

SL:

静态链,指向定义该过程的直接外过程(或主程序)运行肘最新数据段的基地址,用以引用非局部(包围它的过程)变量时,寻找该变量的地址。

DL:

动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释放数据空间时,恢复调用该过程前运行栈的状态。

RA:

返叫地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的地址,用以过程执行结束后返回调用过程时的下一条指令继续执行。

在每个过程被调用时在栈顶分配3个联系单元,用以存放SL,DL,RAo

第5题

PLQ编译程序所产生的目标代码是一种假想栈式计算机的汇编语言,清说明该汇编语言中下列指令各自的功能和所完成的操作。

(1)INTOA

(2)OPR00

(3)CALLA

答案:

PLQ编译程序所产生的目标代码中有3条非常重要的特殊指令,这3条指令在

code中

的位置和功能以及所完成的操作说明如下:

INTOA

在过程目标程序的入口处,开辟A个单元的数据段。

A为局部变量的个数+3。

OPROO

在过程目标程序的出口处,释放数据段(退栈),恢复调用该过程前正在运行的过程的数据段基址寄存器B和栈顶寄存器T的值,并将返回地址送到指令地址寄存器P中,以使调用前的程序从断点开始继续执行。

CALLA

调用过程,完成填写静态链、动态链、返I口I地址,给出被调用过程的基地址值,送入基址寄存器B中,廿标程序的入口地址A的值送指令地址寄存器P中,使指令从A开始执行。

第6题

给出对PLQ语言作如下功能扩充时的语法图和EBNF的语法描述。

(1)扩充条件语句的功能使其为:

if〈条件〉then〈语句〉[else〈语句〉]

⑵扩充repeat语句为:

repeat〈语句〉{;〈语句〉)until〈条件〉

答案:

对PLQ语言作如卜'功能扩充时的语法图和EBNF的语法描述如卜:

⑴扩充条件语句的语法图为:

EBNF的语法描述为:

〈条件语句〉:

:

=if〈条件〉then〈语句〉[else〈语句〉]

⑵扩充repeat语句的语法图为:

EBNF的语法描述为:

《重复语句〉:

:

=repeat〈语句〉{;〈语句〉)until〈条件〉

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

第3章文法和语言

第1题

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

S—Ac|aB

A—ab

B—be

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

答案:

L(G[S])=(abc)

第2题

文法G[N]为:

N—D|ND

D—0|l|2|3|4|5|6|7|8|9

G[N]的语言是什么?

答案:

G[N]的语言是V+oV={0,123,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|l|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>=l)

第5题

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

要求:

⑴允许0打头;

⑵不允许0打头。

答案:

⑴允许0开头的偶正整数集合的文法

E—NT|D

T—NT|D

N—D|l|3|5|7|9

D-*0|2|4|6|8

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

E—NT|D

T—FT|G

N—D|l|3|5|7|9

D-*2|4|6|8

F—N|0

G—D|0

第6题

已知文法G:

v表达式>:

:

*项>|〈表达式>+<项〉

V项〉:

:

X因子〉IV项>*<因子〉

〈因子>:

:

=(<表达式〉)Ii

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

(5)i+(i+i)

(6)i+i*i

答案:

〈表达式〉

〈表达式〉+<项>

v因子〉

<表达式〉

<表达式〉+<项>

〈因子〉

.

I

<项>

〈因子〉

.

I

<项>

V因子〉

(5)〈表达式〉

=〉<表达式〉+<项>

(V表达式>)

(〈表达式>+<项〉)

(<表达式>+<因了〉)

(〈表达式〉+i)

(<项>+»

(〈因子〉+i)

(i+i)

=><表达式>+<因子〉=><表达式>+=>v表达式〉+=><表达式>+=><表达式>+=>〈表达式>+二〉v表达式〉+=><表达式>+=><项>+(i+i)=><因了〉+(i+i)=>i+(i+i)

〈表达式〉

<表达式〉+<项>

〈项>*<因子〉〈因子>i

<项>

v因子〉

(6)〈表达式〉

=><表达式>+<项〉

〈表达式〉+v项>*<因子〉

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

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

=>v表达式〉+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—be

该文法是否为二义的?

为什么?

答案:

对于串abe

⑴S=>Ac=>abc⑵S=>aB=>abc

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

所以,该文法是二义的。

或者:

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

S

aB

bc

S

Ac

ab

第9题

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

S-SS*|SS+|a

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

S

SS*

SS+aaa

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

答案:

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

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

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

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

第10题

文法S-S(S)S|£

⑴生成的语言是什么?

⑵该文法是二义的吗?

说明理由。

答案:

(1)嵌套的括号

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

第11题

令文法G旧为:

E—T|E+T|E-T

T—F|T*F|T/F

FfE)|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的推导树如下:

⑴给出串abbaa最左推导、最右推导。

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

⑶找出该句子的所有短语、直接短语、句柄。

B

a

S

ABS

SBA

£bba

答案:

⑴串abbaa最左推导:

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

最右推导:

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

(2)产生式有:

S->ABS|Aa|eA—aB—SBB|b

可能元素有:

£aaababbaaaaabbaa

⑶该句子的短语有:

a是相对A的短语

£是相对S的短语

b是相对B的短语

£bb是相对B的短语

aa是相对S的短语

a£bbaa是相对S的短语

直接短语有:

aeb

句柄是:

a

第14题

给出生成下述语言的上下文无关文法:

(1)(anbnambm|n,m>=0)

(2)(InOmlmOn|n,m>=0)

(3)(WaWr|W属于(O|a}*,Wr表示W的逆}

答案:

(1)

S-AA

A—aAb|£

(2)

S—ISO|A

A->OA1|e

(3)

S->OSO|1S1|e

第16题

给出生成下述语言的三型文法:

⑴{an|n>=0)

(2)(anbm|n,m>=l}

(3)(anbmck|n,m,k>=0)

答案:

⑴S—aS|£

S—aA

A—aA|B

B—bB|b

A-*aA|B

B—bB|C

C—cC|£

第17题

习题7和习题11中的文法等价吗?

答案:

等价。

第18题

解释下列术语和概念:

(1)字母表

(2)串、字和句子

(3)语言、语法和语义

答案:

(1)字母表:

是一个非空有穷集合。

(2)串:

符号的有穷序列。

字:

字母表中的元素。

句子:

如果Zx,xev*T则称x是文法G的一个句了。

+

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

第4章词法分析

第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

答案:

⑴先构造NFA:

用子集法将NFA确定化

.01

X.A

AAAB

ABACAB

ACAABY

ABYACAB

除X,A夕卜,重新命名其他状态,令AB为B、AC为C、ABY为D,因为D含有Y(NFA的终态),所以D为终态。

.01

X.A

AAB

BCB

CAD

DCB

DFA的状态图:

⑵先构造NFA:

X1A

eB

1C0D1E

0

£

F1G0H1I0J1K

L

E€

0

Y

£

£

用子集法将NFA确定化

E01

XX

TO=XA

AABFL

Tl=ABFLYCG

YY

CGCGJ

T2=Y

T3=CGJDHK

DHDH

KABFKL

T4=DHEl

ElABEFIL

T5=ABFKLYCG

T6=ABEFILEJYCG

EJYABEFGJLY

T7=ABEFGJLYEHYCGK

EHYABEFHLY

CGKABCFGJKL

T8=ABEFHLYEYCGI

EYABEFLY

CGICGJI

T9=ABCFGJKLDHYCGK

DHYDHY

T10=ABEFLYEYCG

Tll=CGJIDHJK

DHJDHJ

T12=DHYEI

T13=DHJEIK

EIKABEFIKL

T14=ABEFIKLEJYCG

将TO、TO.、T2、T3、T4、T5>T6、T7、T8、T9、T1O、Til、T12>T13、T14重新命名,分别

用0、

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

因为2、7、8、10、12中含有Y,所以它们都为终态。

01

01

123

2

345

46

523

673

789

81011

9129

10103

11135

126

1314

1473

010

12

12

7

108

3

45

6

9

111314

1

1

0

1

0

1

0

1

1

0

1

0

1

01

0

1

0

1

(3)先构造NFA:

先构造NFA:

XaA

£B

a,b

E

DaEaF

C

e

Y

E

E

b

e

b

用子集法将NFA确定化

eab

XX

T0=XA

AABCD

T1=ABCDBEBY

BEABCDE

BYABCDY

T2=ABCDEBEFBEY

BEFABCDEF

BEYABCDEY

T3=ABCDYBEBY

T4=ABCDEFBEFBEY

T5=ABCDEYBEFBEY

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

因为3、5中含有Y,

所以它们都为终态。

ab

01

123

245

323

445

545

0a1b3

2

a

5

a4

b

a

b

a

b

a

b

(4)先构造NFA:

XA

b

eB

a

FbGbH

E

£

Y

a

E

CDb£

Ib

用子集法将NFA确定化:

eab

XX

TO=XA

AABDEF

T1=ABDEFCIG

ClCl

GG

T2=CIDY

DYABDEFY

T3=GH

HABEFH

T4=ABDEFYClG

T5=ABEFHClG

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

因为4中含有Y,所以它为终态。

ab

01

123

24

35

423

523

DFA的状态图:

Oblb

2

a

4

5

3

b

b

a

b

a

b

第2题

已知NFA=({x,y,z},{0,l},M,{x},{z}),其中:

M(x,0)={z},M(y,0)={x,y},,M(z,0)=(x,z),

M(x,l)={x},M(y,l)=(l>,M(z

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2