编译原理.docx
- 文档编号:9139334
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:224
- 大小:954KB
编译原理.docx
《编译原理.docx》由会员分享,可在线阅读,更多相关《编译原理.docx(224页珍藏版)》请在冰豆网上搜索。
编译原理
第一章引论
本章要点:
1.正确理解什么是编译程序;
2.了解编译程序工作的基本过程及各阶段的基本任务;
3.熟悉编译程序的总体结构框图;
4.了解编译程序的构造过程和构造工具。
本章目标:
1.掌握本章的“编译程序”、“交叉编译程序”、“编译前端与编译后端”等基本概念,并能在以后的学习熟练运用;
2.掌握T形图表示。
本章重点:
1.概念比较:
①编译程序、解释程序;
②诊断编译程序、优化编译程序;
③交叉编译程序、可变目标编译程序;
④编译前端与编译后端;
2.编译工作过程的五个阶段;
3.编译程序总框;
4.编译程序“移植”。
本章难点
1.编译程序“移植”;
作业题及参考答案
一、单项选择题:
(按照组卷方案,至少8道小题)
1.如果一个编译程序能产生不同于其宿主机的机器代码,则称它为:
。
a.诊断编译程序b.优化编译程序c.交叉编译程序d.可变目标编译程序
2.编译程序将高级语言程序翻译成。
a.机器语言程序或高级语言程序b.汇编语言或机器语言程序
c.汇编语言程序或高级语言程序d.中间语言程序或高级语言程序
3.下面的四个选项中,__________不是编译程序的组成部分。
a.词法分析程序b.代码生成程序c.设备管理程序d.语法分析程序
4.现代多数实用编译程序所产生的目标代码都是一种可重定位的指令代码,在运行前必须借助于一个把各个目标模块,包括系统提供的库模块连接在一起,确定程序变量或常数在主存中的位置,装入内存中制定的起始地址,使之成为一个可运行的绝对指令代码的程序。
a.重定位程序;b.解释程序;c.连接装配程序;d.诊断程序;
5.从编译程序的角度说,源程序中的错误通常分为两大类。
a.词法错误和语法错误;b.语法错误和语义错误;
c.编辑错误和诊断错误;d.词法错误和语义错误;
6.下面对编译原理的有关概念正确描述的是:
。
a.目标语言只能是机器语言b.编译程序处理的对象是源语言。
c.Lex是语法分析自动生成器d.解释程序属于编译程序
7.目标代码生成阶段所生成的目标代码的形式不可能是。
a.绝对指令代码b.可充定位的指令代码。
c.汇编指令代码d.三地址代码
8.语义错误是指源程序中不符合语义规则的错误,不包括:
a.非法字符错误b.类型不一致错误。
c.作用域错误d.说明错误
一.答案:
1.c;2.b;3.c;4.c;5.b;6.d;7.d;8.a;
二、填空题:
(按照组卷方案,至少8道小题)
1.我们有时把编译程序划分为编译前端和编译后端。
前端主要由与有关但与
无关的那些部分组成。
2.对编译程序而言,输入数据是;输出数据是。
3.编译后端通常不依赖于源语言而仅仅依赖于。
4.如果不需改写编译程序中与机器无关的部分就可以把编译程序移植到另外一个目标机上,则称该编译程序是。
5.描述程序设计语言词法的有效工具是。
6.编译过程的每一个阶段都能检测出错误,其中,绝大多数错误在_______阶段检测出来的。
7.为了使编译后的Java程序从一个平台移到另外一个平台上执行,Java定义了一种称为ByteCode的虚拟机代码。
只要实际使用的操作平台上实现了执行ByteCode的Java解释器,这个操作平台就可以执行各种Java程序。
这就是所谓Java语言的。
8.在一个程序设计环境中,起着中心作用。
连接程序、调试程序、程序分析等工具的工作直接依赖于它所产生的结果。
二.答案:
1.源程序,目标机;2.源程序,目标程序;3.中间语言;4.可变目标编译程序;5.正规式和有限自动机;6.词法分析、语法分析和语义分析;7.操作平台无关性;8.编译程序。
三、判断题:
(按照组卷方案,至少8道小题)
1.在编译过程中,既可以将几个不同的阶段合为一遍,也可以把一个阶段的工作分为若干遍。
()
2.编译程序生成的目标程序都是可执行的程序。
()
3.编译前端主要由与源语言和目标机相关的那些部分组成。
()
4.优化的任务在于对前端编译所产生的中间代码进行加工和变换,以其能产生运行结果更为准确的目标代码。
()
5.为了让编译程序可改变目标机,通常需要一种良好定义的中间语言支持。
()
6.汇编器将高级语言程序翻译成汇编语言程序。
()
7.许多编译程序在识别出语法单位后并不真正构造语法树。
()
8.取编译程序前端改写其后端以生成不同机器上的目标代码,目前技术上还难以实现。
()
三.答案1.√;2.×;3.×;4.×;5.√;6.×;7.√;8.×;
四、名词解释:
、
(按照组卷方案,至少3道小题)
1.诊断编译程序、优化编译程序;
2.交叉编译程序、可变目标编译程序;
3.编译程序的“遍”
4.程序设计环境
四.答案:
1.诊断编译程序:
专门用于帮助程序开发和调试的编译程序。
优化编译程序:
着重于提高目标代码效率的编译程序。
2.交叉编译程序:
能产生不同于其宿主机的机器代码的编译程序。
可变目标编译程序:
不需重写编译程序中与机器无关的部分就能改变目标机的编译程序。
3.编译程序的“遍”:
就是对源程序或者中间结果从头到尾的一次扫描,并做有关的加工处理,生成新的中间结果或者目标程序。
4.程序设计环境:
支持程序设计人员进行程序设计开发所需要的如编辑程序、编译程序、连接程序和调试程序等软件工具,一起构成程序设计环境。
五、简答题:
(按照组卷方案,至少3道小题)
1.什么是编译程序的“遍”?
2.什么编译程序、解释程序?
编译程序和解释程序有什么区别?
3.前端编译和后端编译是如何划分的?
4.什么是标识符,什么是名字,它们的区别是什么?
5.如果机器A上已有一个用A机器代码实现的某高级语言L1的编译程序,则可以用L1编写另一种高级语言L2的编译程序,画出这个实现过程的T形图表示。
6.如何采用“移植”的办法,利用A机器上已有的高级语言L编写能够在B机器上运行的高级语言L的编译程序?
画出T形图表示。
五.答案:
1.编译程序的“遍”,就是对源程序或者中间结果从头到尾的一次扫描,并做有关的加工处理,生成新的中间结果或者目标程序。
既可以将几个不同阶段合为一遍,也可以把一个阶段的工作分为若干遍。
当一遍中包含若干阶段时,各阶段的工作是穿插进行的。
一个编译程序究竟应分为几遍、如何划分,是与源语言、设计要求、硬件设备等诸因素有关的,难以统一规定。
2.编译程序:
把某一种高级语言源程序转换成汇编语言程序或机器语言程序的程序。
解释程序:
对高级语言源程序并不生成汇编程序或机器语言程序,而是边解释边执行的程序。
编译程序把源语言程序翻译成目标代码,然后由操作系统加载执行;而解释程序则是边翻译边执行,不生成目标代码。
3.前端编译和后端编译是如何划分的?
根据编译器的工作是与源语言相关还是目标机器有关来进行划分。
编译前端:
编译程序中包括词法分析、语法分析、语义分析和中间代码产生等主要与源语言程序有关但与目标机无关的那些部分叫编译前端。
编译后端:
编译程序中包括目标代码生成、目标代码优化等与目标机有关而与源语言无关的那些部分部分叫编译后端。
4.标识符是由字母或数字以及某些特殊符号(因不同的高级语言而不同)组成的,但是必须以字母开头的一个字符串。
当给某标识符以确切的含义时,这个标识符就叫做名字。
程序语言中的各种名字都是用标识符表示的。
名字和标识符具有相同的形式,名字使用标识符来描述,但标识符是没有意义的字符序列,而名字却有确切的意义和属性(即类型和作用域)。
5.
6.
第二章高级语言及其语法描述
本章要点
1.程序语言的定义;
2.高级程序语言一般结构和主要共同特征;
3.正确理解上下文无关文法基本概念,包括:
文法的定义、推导、句型、句子、语言、语法树、二义性等;
4.Chomsky文法分类;
本章目标
掌握和理解程序语言的定义、高级语言的一般特征及程序语言的语法描述。
本章重点
1.语法,词法规则与语法规则;
2.语义和语义规则;
3.数据类型与操作;
4.推导,最左推导和最右推导;
5.语法分析树和二义性;
本章难点
1.二义性文法;
2.Chomsky各个文法类;
作业题
一、单项选择题:
(按照组卷方案,至少15道小题)
1.Chomsky把文法分成四种类型,0型、1型、2型和3型。
3型文法也称为,2型文法也称为。
a.上下文无关文法b.上下文相关文法c.正则文法d.短语文法
2.许多广为使用的语言,如Fortran、C、Pascal等,属于。
a.强制式语言b.应用式语言c.基于规则的语言d.面向对象的语言
3.设G是一个文法,S是开始符号。
若S*,(VT∪VN)*,则称是一个。
a.句子b.句型c.推导d.语言
4.一个数据类型通常包括的三种要素中,没有下面的。
a.用于区别这种类型的数据对象的属性;b.这种类型的数据对象可以具有的值;
c.对这种类型的数据对象的内存分配;d.可以作用于这种类型的数据对象的操作;
5.Chomsky把文法分成四种类型,其中,也称正规文法
a.0型b.1型c.2型d.3型
6.语言的词法规则一般用Chomsky的型文法来描述:
a.0b.1c.2d.3
7.文法
S→(L)|a
L→L,S|S
中,下面是该文法中的终结符号。
a.Sb.,c.Ld.|
8.文法G所描述的语言是的集合。
a.文法G的字母表中的所有符号组成的符号串;
b.文法G的字母表的闭包*中的所有符号串;
c.文法G的识别符号推出的所有符号串;
d.文法G的识别符号推出的所有终结符号串;
9.语言L={c|(a|b)*},该语言是_____________语言。
a.3型语言,b.2型语言,c.1型语言,d.0型语言
10.设有文法G:
I→I1|I0|Ia|Ic|a|b|c|
下面符号串中不是该文法的句子是:
a.ab0,b.a0c01,c.aaa,d.bc10
11.给定文法A→bA|cc,下面的符号串中,是该文法句子的是________。
a.bcbc,b.bbbcc,c.bcbcc,d.bccbcc;
12.Chomsky定义的四种形式语言文法中,2型文法可由(G)识别。
a.图灵机;b.确定性有限自动机;c.下推自动机;d.非确定性有限自动机;
13.若文法G定义的语言是无限集,则文法必然是。
a.上下文无关的b.递归的c.二义性的d.无二义性的
14.文法S→aaS|abc定义的语言是。
a.{a2kbc|k>0}b.{akbc|k>0}
c.{a2k-1bc|k>0}d.{akakbc|k>0}
15.文法:
G:
S→xSx|y所识别的语言是()。
a.xyxb.(xyx)*c.x*yx*d.xnyxn(n≥0)
一.答案:
1.c.;2.a.;3.b;4.c;5.d;6.d;7.b;8.d;9.d;10.a;11.b;12.c;13.b;
14.c;15.d;
二、填空题:
(按照组卷方案,至少15道小题)
1.假设G是一个文法,是由终结符和非终结符组成的串,S是文法的开始符号,如果S=>*,则称是。
2.在赋值语句中,赋值号‘:
=’左右两边的变量名扮演着两种不同的角色,为了区分一个名字的这两种特征,我们把一个名字所代表的称为该名的左值,把一个名字的称为该名字的右值。
3.对于文法G,仅含终结符号的句型称为。
4.设有文法G[S],其部分产生式:
E→E+T|T
T→T*F|F
F→(E)|a
则VN={},VT={}。
5.由文法产生的集合是文法产生的语言。
6.Chomsky语法定义的3型文法又可以分为。
7.一个上下文文法G的四个组成部分分别是:
。
8.已知语言:
{anbnambm|n,m≥0},其语法定义为:
G=({a,b},{S,A,B},S,P),其中P为:
。
9.已知某语言的语法定义为:
G=({a},{S}S,P),且P:
S→aS|,则该语言为。
10.已知某语言为{cwR|∈{a,b}*},其语法定义为G=({a,b,c},{S},S,P),其中P为:
。
11.所谓最右推导是指。
12.已知文法G(Z):
E→ET+|T
T→TF*|F
F→FP↑|P
*a;S-|.q[八公山下P→E|i
试写出其识别的一个句子:
_____________________。
13.文法G[S]:
S→aA|a, A→aS为_______型文法,其确定的语言的为:
_______。
14.在一棵语法树生长过程中的任何时刻,就是一个句型。
15.我们说G=(VT,VN,S,P)是一个0型文法,如果它的每一个产生式→是这样一种结构:
。
二.答案:
1.句型;2.单元的地址(或者:
单元、存储单元的地址),值(或者:
单元的内容)3.句子;4.VN={E,T,F},VT={+,*,(,),a};5.句子;6.右线性文法和左线性文法;7.开始符号,产生式集合,终结符集合,非终结符集合;8.S→AB;A→aAb|;B→aBb|;9.{an|n≥0};10.S→aSa|bSb|;11.任何一步都是对中的最右非终结符进行替换。
12.iii↑*+;13.{a2n+1|n≥0};14.所有那些没有后代的末端结点从左到右排列起来;15.∈(VN∪VT)*且至少含有一个非终结符,而∈(VN∪VT)*。
三、判断题:
(按照组卷方案,至少15道小题)
1.一棵语法树表示了一个句型所有的不同推导过程,包括最右推导和最左推导。
()
2.可能有两个不同的文法G和G′,期中一个是二义的而另一个是无二义的,但是却有L(G)=L(G′)。
()
3.变量既持有左值又持有右值,而常数和带有算符的表达式一般认为只持有右值。
()
4.文法G:
S→bA
A→aA|a
定义的语言是所有以b开头的后跟至少一个a的字符串的集合。
()
5.设有文法G:
S→S*S|S+S|(S)|a
该文法是二义的。
()
6.正则文法一定不是二义的。
()
7.上下文无关文法可以产生语言L={anbnci|i>=1,n>=1}。
()
8.不存在任何正规文法能产生语言L={anbn|n>=1}。
()
9.对于每一个左线性文法G1,都存在一个右线性文法G2,使得L(G1)=L(G2)。
()
10.正规文法产生的语言都可以用上下文无关文法来描述。
()
11.上下文无关文法比正规文法有更强的描述能力。
()
12.文法的二义性和语言的二义性在概念上是相同的,也就是说,对于某个语言,不可能存在两个以上的文法来描述它。
()
13.二义性是可以判定的,也就是说,可以编这么一个程序,输入该文法后,该程序能确切地给出该文法是否二义的答案。
()
14.说明语句旨在定义名字的性质。
编译程序把这些性质登记在符号表中,并检查程序中名字的引用和说明是否一致。
实际上,许多说明语句并不能翻译成相应的目标代码。
()
15.C语言是一个允许子程序嵌套定义的语言。
()
三.答案:
1.√;2.√;3.√;4.√;5.√;6.×;7.√;8.√;9.√;10.√;11.√;12.×;13.×;14.√;15.×;
四、名词解释:
(按照组卷方案,至少3道小题)
1.二义性文法;2.推导和直接推导;3.句型,句子和语言;4.上下文无关文法;
5.语法;6.正规文法(左线性文法和右线性文法);
四.答案:
1.如果一个文法存在某个句子对应两棵以上不同的语法树,则称这个文法是是二义性文法。
2.设A→是一个产生式,且、(VTVN)*,若A=>,则称A直接推出;或者说,是A的一个直接推导。
如果1=>2=>……=>n,则称这个序列是从1到n的一个推导。
3.设G是一个文法,S是它的开始符号。
如果S=>*,则称是一个句型。
仅含终结符的句型叫句子。
文法G所产生的句子的全体叫文法G的语言,记为L(G),L(G)={|S=>*,∈VT*}。
4.上下文无关文法G是一个四元式(VT,VN,S,P),其中:
VT是一个非空有限集合,其中的每一个元素称为终结符;
VN是一个非空有限集合,其中的每一个元素称为非终结符,VN∩VT=;
S是一个非终结符,称为开始符号;
P是一个产生式有限集合,每个产生式的形式是P→,其中PVN,∈(VTVN)*。
开始符号S至少必须在某个产生式的左部出现一次。
5.若文法G=(VT,VN,S,P)的任何产生式为A→B或A→,其中,VT*,A,B∈VN,则称G是右线性文法;
若文法G=(VT,VN,S,P)的任何产生式为A→B或A→,其中,VT*,A,B∈VN,则称G是左线性文法;
左线性文法和右线性文法均为正规文法。
五、简答题:
(按照组卷方案,至少3道小题)
1.作为描述程序语言的上下文无关文法,对它有哪些限制?
答:
第一点:
文法中不含任何下面形式的产生式:
P→P;
第二点:
每个非终结符P都必须有用处。
也就是说,必须存在含P的句型;或者说,对P不存在永不终结的回路。
2.什么是二义性文法?
从输入串abab来说明下面文法二义吗?
S→aSbS|bSaS|ε
该文法产生的语言是什么?
答:
如果一个文法存在某个句子对应两棵以上不同的语法树,则称这个文法是二义的。
例如输入串abab,它有两棵语法树如下:
所以,该文法是二义的。
此文法产生的语言是:
所有a的个数与b的个数相等的由a和b组成的字符串。
3.文法G[S]为:
S→Ac|aB
A→ab
B→bc
该文法是否为二义的?
为什么?
答:
对于串abc
(1)S=>Ac=>abc
(2)S=>aB=>abc
即存在两不同的最右推导。
所以,该文法是二义的。
或者:
对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。
4已知文法G=({A,B,C},{a,b,c},P,A),P由以下产生式组成:
A→abc
A→aBbc
Bb→bB
Bc→Cbcc
bC→Cb
aC→aaB
aC→aa
此文法所表示的语言是什么?
答:
分析文法的规则:
每使用一次Bc→Cbcc,b、c的个数各增加一个;
每使用一次aC→aaB或aC→aa,a的个数就增加一个;
产生式Bb→bB、bC→Cb起连接转换作用。
由于A是开始符号,由产生式A→abc推导得到终结符号串abc;由产生式A→aBbc推导得到B后,每当使用产生式Bb→bB、Bc→Cbcc、bC→Cb、aC→aaB就会递归调用B一次,所产生的a、b、c的个数分别增加一个,因此推导所得的终结符号串为abc、aabbcc、aaabbbccc、…所以文法描述的语言为{anbncn|n>0}.
5已知文法G[Z]:
Z→0U|1V
U→1Z|1
V→0Z|0
(1)请写出此文法描述的只含有4个符号的全部句子。
(2)G[Z]产生的语言是什么?
(3)该文法在Chomsky文法分类中属于几型文法?
答:
(1)0101,0110,1010,1001
(2)分析G[Z]所推导出的句子的特点:
由Z开始的推导不外乎图1所示的四种情形。
由Z推导出10或01后就终止或进入递归,而Z的每次递归将推导出相同的符号串:
10或01。
所以G[Z]产生的语言L(G[Z])={x|x∈(10|01)+}
(3)该文法属于3型文法。
七、应用题:
1.试分析下面给出的if-then-else语句的文法,它的提出原本是为了矫正dangling-else(else悬挂)文法的二义性:
stmt→ifexprthenstmt|matched-stmt
matched-stmt→ifexprthenmatched-stmtelsestmt|other
expr→e
考虑句子ifethenifethenotherelseifethenotherelseother,试说明此文法仍然是二义性的。
答:
1.考虑句子ifethenifethenotherelseifethenotherelseother
它具有如下所示的两种分析树
则上面给出的if-then-else文法仍是二义性的。
2.考虑文法G[bexpr]:
bexpr→bexprorbterm|bterm
bterm→btermandbfactor|bfactor
bfactor→notbfactor|(bexpr)|true|false
(a)请指出此文法的终结符号、非终结符号和开始符号。
(b)试对于句子not(trueorfalse)构造一棵分析树。
(c)试说明此文法所产生的语言是全体布尔表达式。
答:
(a)终结符号为:
{or,and,not,(,),true,false}
非终结符号为:
{bexpr,bterm,bfactor}
开始符号为:
bexpr
(b)句子not(trueorfalse)的分析树为:
(c)用归纳法说明如下:
(1)不含运算的布尔表达式,常数true和false由此文法产生:
bexpr=>bterm=>bfactor=>true
bexpr=>bterm=>bfactor=>false
(2)设结论对于少于n(n≥1)个运算的布尔表达式成立,即若be1和be2是含有少于n个运算的布尔表达式,则有:
bexpr=>+be1,bexpr=>+be2。
(3)对于含有n个运算的布尔表达式,可表示成下面三种形式:
(a)(be1)or(be2)
(b)(be1)and(be2)
(c)not(be1)
对于(a):
bexpr=>bexprorbterm
=>btermorbterm=>bfactororbterm
=>(bexpr)orbterm=>+(be1)orbterm
=>(be1)orbfactor=>(be1)or(bexpr)
=>+(be1)or(be2)
同理,有:
Bexpr=>+(be1)and(be2)
Bexpr=>+not(be1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理
![提示](https://static.bdocx.com/images/bang_tan.gif)