编译原理试题库.docx
- 文档编号:24023431
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:30
- 大小:83.67KB
编译原理试题库.docx
《编译原理试题库.docx》由会员分享,可在线阅读,更多相关《编译原理试题库.docx(30页珍藏版)》请在冰豆网上搜索。
编译原理试题库
一填空题
1.编译程序首先要识别出源程序中每个,然后再分析每个并翻译其意义。
单词,句子
2.编译器常用的语法分析方法有和两种。
自底向上,自顶向下
2.通常把编译过程分为分析与综合两大阶段。
词法、语法和语义分析是对源程序的分析,中间代码生成、代码优化与目标代码的生成则是对源程序的综合。
前端,后端
4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即方案和分配方案。
静态存储分配,动态存储
5.对编译程序而言,输入数据是,输出结果是。
源程序,目标程序
6.文法G包括四个组成部分:
一组终结符号,一组非终结符号,一组,以及一个开始符号。
产生式
7.文法按产生式的形式分为四种类型,它们是:
0型文法,又称短语文法;1型文法,又称上下文有关文法;2型文法,又称;3型文法,又称。
上下文无关文法,正规文法
8.最右推导称为,由规范推导产生的句型称为规范句型。
规范推导
9.设G是一个文法,S是它的开始符号,如果S=>*α,则称α是一个。
仅由终结符号组成的句型是一个。
句型,句子
10对于一个文法G而言,如果L(G)中存在某个句子对应两棵不同,那么该文法就称为是二义的。
语法树
11.通常程序设计语言的单词符号分为五种:
基本字、、常数、算符、界限符。
标识符
12.在自底向上分析法中,LR分析法把“可归约串”定义为。
句柄
13.编译中常用的中间代码形式有逆波兰式、三元式、和四元式等。
树代码
14.对中间代码优化按涉及的范围分为,和全局优化。
局部优化,循环优化
15.局部优化主要包括、利用公共子表达式和删除无用赋值等内容。
合并已知量
16.为了构造不带回溯的递归下降分析程序,我们通常要消除和提取
左递归,左公共因子
17.计算机执行用高级语言编写的程序主要有两种途径:
和。
解释执行,编译执行
18.扫描器是词法分析,它接收输入的,对源程序进行词法分析并识别出一个个,供语法分析器使用。
源程序,单词符号
19.自下而上分析法采用,,和等四种操作。
移进、规约、错误处理、接受
20.一个LR分析器包括两部分:
一个总控程序,和分析栈。
一张分析表
21.后缀式abc-/所代表的表达式是。
a/(b-c)
22.局部优化是在范围内进行的一种优化。
基本块
23.不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:
静态存储分配方案和动态存储分配方案,而后者又分为和。
栈式动态存储分配,堆式动态存储分配
24.规范规约是。
最左规约
25.编译程序的工作过程一般划分为5个阶段:
词法分析、、语义分析与中间代码生成,代码优化及目标代码生成。
另外还有和出错处理。
语法分析,表格管理
26.表达式x+y*z/(a+b)的后缀式为。
xyz*ab+/+
27.文法符号的属性有综合属性和。
继承属性
28.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i,j]的地址计算公式为。
a+(i-1)*20+j-1
29.局部优化是局限于一个范围内的一种优化。
基本块
二选择题
1.语言是
A.句子的集合B.产生式的集合
C.符号串的集合D.句型的集合
A
2.编译程序前三个阶段完成的工作是
A.词法分析、语法分析和代码优化
B.代码生成、代码优化和词法分析
C.词法分析、语法分析、语义分析和中间代码生成
D.词法分析、语法分析和代码优化
C
3.一个句型中称为句柄的是该句型的最左
A.非终结符号B.短语C.句子D.直接短语
D
4.下推自动机识别的语言是
A.0型语言B.1型语言
C.2型语言D.3型语言
C
5.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即
A.字符B.单词C.句子D.句型
B
6.对应Chomsky四种文法的四种语言之间的关系是
A.L0L1L2L3B.L3L2L1L0
C.L3=L2L1L0D.L0L1L2=L3
B
7.词法分析的任务是
A.识别单词B.分析句子的含义
C.识别句子D.生成目标代码
A
8.常用的中间代码形式不含
A.三元式B.四元式
C.逆波兰式D.语法树
D
9.代码优化的目的是
A.节省时间B.节省空间
C.节省时间和空间D.把编译程序进行等价交换
C
10.代码生成阶段的主要任务是
A.把高级语言翻译成汇编语言
B.把高级语言翻译成机器语言
C.把中间代码变换成依赖具体机器的目标代码
D.把汇编语言翻译成机器语言
C
11.一个上下文无关文法G包括四个组成部分:
一组终结符,一组非终结符,一个(),以及一组()。
A.字符串B.产生式C.开始符号D.文法
C,B
12.程序的基本块是指()。
A.一个子程序B.一个仅有一个入口和一个出口的语句
C.一个没有嵌套的程序段D.一组顺序执行的程序段,仅有一个入口和一个出口
D
13.高级语言编译程序常用的语法分析方法中,递归下降分析法属于()分析方法。
A.自左向右B.自顶向下C.自底向上D.自右向左
C
14.在通常的语法分析方法中,()特别适用于表达式的分析。
A.算符优先分析法B.LR分析法
C.递归下降分析法D.LL
(1)分析法
A
15.经过编译所得到的目标程序是()。
A.四元式序列B.间接三元式序列
C.二元式序列D.机器语言程序或汇编语言程序
D
16.一个文法所描述的语言是();描述一个语言的文法是()。
A.唯一的B.不唯一的C.可能唯一,也可能不唯一
A,C
17.词法分析器的输出结果是()。
A.单词的种别,编码B.单词在符号表的位置
C.单词的种别编码和自身值D.单词自身值
C
18.正规式M1和M2等价是指()。
A.M1和M2的状态相等
B.M1和M2的有向边条数相等
C.M1和M2所识别的语言集相等
D.M1和M2状态数和有向边条数相等
C
19.文法G:
S→xSx|y所识别的语言是()。
A.xyxB.(xyx)*C.x
yx
D.x*yx*
C
20.如果文法G是二义的,则它的任何句子α()
A.最左推导和最右推导对应的语法树必定相同
B.最左推导和最右推导对应的语法树可能不同
C.最左推导和最右推导必定相同
D.可能存在两个不同的最左推导但是他们对应的语法树相同。
A
21.构造编译程序应掌握()
A.编译程序B.目标语言C.编译方法D.以上三项都是
D
22.四元式之间的联系是通过()实现的。
A.指示器B.临时变量
C.符号表D.程序变量
B
23.程序的基本块是指()
A.一个子程序B.一个仅有一个入口和一个出口
C.一个没有嵌套的程序段D.一组顺序执行的程序段,仅有一个入口和一个出口
D
24.优化可生成()的目标代码。
A.运行时间较短
B.占用存储空间较小
C.运行时间短但占用内存空间大
D.运行时间短且占用存储空间小
D
25.下列()优化方法不是针对循环优化进行的。
A.强度削弱B.删除归纳变量
C.删除多余运算D.代码外提
C
26.编译程序使用()区别标识符的作用域
A.说明标识符的过程或者函数名
B.说明标识符的过程或函数的静态层次
C.说明标识符的过程或函数的动态层次
D.标示符的行号
B
三名词解释
1.词法分析
词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,并转换成统一的内部表示(token),送给语法分析程序。
2.LL
(1)文法
若文法的任何两个产生式A|都满足下面两个条件:
(1)FIRST()FIRST()=;
(2)若*,那么FIRST()FOLLOW(A)=。
我们把满足这两个条件的文法叫做LL
(1)文法,其中的第一个L代表从左向右扫描输入,第二个L表示产生最左推导,1代表在决定分析器的每步动作时向前看一个输入符号。
除了没有公共左因子外,LL
(1)文法还有一些明显的性质,它不是二义的,也不含左递归。
3.语言和文法
文法就是语言结构的定义和描述,是有穷非空的产生式集合。
文法G定义为四元组的形式:
G=(VN,VT,P,S)
其中:
VN是非空有穷集合,称为非终结符号集合;VT是非空有穷集合,称为终结符号集合;P是产生式的集合(非空);S是开始符号(或识别符号)。
这里,VN∩VT=,S
VN。
V=VN∪VT,称为文法G的字母表,它是出现文法产生式中的一切符号的集合。
文法G所描述的语言用L(G)表示,它由文法G所产生的全部句子组成,即L(G)={x|S*x,其中S为文法开始符号,且
}简单的说,文法描述的语言是该文法一切句子的集合。
4.简述代码优化的目的和意义。
代码优化是尽量生成“好”的代码的编译阶段。
也就是要对程序代码进行一种等价变换,在保证变换前后代码执行结果相同的前提下,尽量使目标程序运行时所需要的时间短,同时所占用的存储空间少。
5.编译过程通常分为哪几个阶段?
每个过程的主要功能?
编译过程通常分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个主要阶段。
各个阶段的主要功能如下:
词法分析阶段:
读入源程序,对构成源程序的字符流进行扫描和分解,识别出一个个单词,并表示成计算机内部的形式。
语法分析阶段:
在词法分析的基础上,将单词序列分解成各类语法短语,如“表达式”、“语句”、“程序”等,确定整个输入串是否构成语法上正确的程序。
语义分析阶段:
审查源程序有无语义错误,为代码生成阶段收集类型信息。
中间代码生成阶段:
将源程序翻译成一种复杂性介于源程序与目标程序之间的内部形式(中间代码)。
代码优化:
对前阶段产生的中间代码进行等价变换,目的是使将来生成的目标代码更为高效。
目标代码生成:
把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
6.简述代码优化的原则和目标
原则:
对中间代码进行等价变换,使代码变换后功能不变。
目标:
变换后的代码运行速度更快,占用的存储空间更少。
7.试为表达式w+(a+b)*(c+d/(e-10)+8)写出相应的逆波兰表示。
wab+cde10-/+8+*+
8.写出表达式a+b*(c-d)/e的逆波兰式和三元序列。
逆波兰式:
abcd-*e/+
三元序列:
oparg1arg2
(1)-cd
(2)*b
(1)
(3)/
(2)e
(4)+a(3)
四.判断题请在括号内,正确的划√,错误的划×)
1.编译程序是对高级语言程序的解释执行。
()
×
2.一个有限状态自动机中,有且仅有一个唯一的终态()
×
3.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
()
√
4.语法分析时必须先消除文法中的左递归()
×自顶向下
5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确的指出出错地点()
√
6.逆波兰表示法表示表达式时无需使用括号。
()
√
7.静态数组的存储空间可以在编译时确定。
()
×
静态链接的情况下,链接器可以确定,编译只是把文本文件编译成为obj文件并不确定地址
8.进行代码优化时应该着重考虑循环的代码优化,这对提高代码的效率将起更大作用。
()
×
9.两个正规集相等的必要条件是他们对应的正规式等价。
()
×应该说正规式等价的必要条件是正规集相等
10.一个语义子程序描述了一个文法所对应的翻译工作。
()
×
1审查每个语法结构的静态语义,2进行制导翻译
11.一个上下文无关文法的开始符,可以是终结符或非终结符。
()
×
12.已经证明文法的二义性是可判定的。
()
×
13.每个基本块可用一个DAG表示。
()
√
14.一个句型一定是句子。
()
×
15.算符优先分析法每次都是对句柄进行归约。
()
√
16.采用三元式实现三地址代码时,不利于对中间代码进行优化。
()
√
17.编译过程中,语法分析器的任务是分析单词是怎样构成的。
()
×
18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
()
√
19.并不是每个文法都能改写成LL
(1)文法。
()
√
20.一个LL
(1)文法一定是无二义的。
()
√
四简单题
1.设有文法G1:
S→SaQ∣Q
Q→QbR∣R
R→cSd∣e
(1)证明句型QbRae是规范句型
(2)给出句型QbRae的语法树和句柄:
解答:
证明:
(1)因为句型QbRae可由文法开始符S经过规范推导产生,推导过程如下:
S=>SaQ=>SaR=>Sae=>Qae=>QbRae
所以句型QbRae是规范句型(2分)
(2)、语法树(1分)
S
Q
句柄:
QbR
2.设有非确定的有限自动机NFAM=({A,B,C},{0,1},,{A},{C})其中:
(A,0)={C},(A,1)={A,B},(B,1)={C}(C,1)={C}。
请画出状态转换矩阵和状态转换图。
解答:
状态转换距阵为:
符号
状态
0
1
A
C
A,B
B
C
C
C
状态转换图为:
3.构造正规式1(0|1)*101相应的DFA.
解:
4.设有基本块:
T1:
=2
T2:
=10/T1
T3:
=S-R
T4:
=S+R
A:
=T2*T4
B:
=A
T5:
=S+R
T6:
=T3*T5
B:
=T6
(1)画出DAG图
(2)假设基本块出口时只有A,B还被引用,请写出优化后的四元序列。
4、
(1)DAG图
(2)优化后的四元式序列:
T3:
=S-R
T4:
=S+R
A:
=5*T4
B:
=T4*T3
5.考虑一下文法:
D→ TV
T→ int|float
V→id,V|id
(1)在该文法中提取左公共因子。
(2)为所得的文法的非终结符构造First集合和Follow集合。
(3)说明所得的文法是LL
(1)文法。
(4)为所得的文法构造LL
(1)分析表。
解答:
(1)文法存在左公因子,提取左公因子后的文法为:
D→ TV
T→ int|float
V→idV'
V'→,V|ε
(2)
非终结符
First集合
Follow集合
D
{int,float}
{#}
T
{int,float}
{id}
V
{id}
{#}
V'
{,,ε}
{#}
(3)(a)First(T→ int)∩First(T→ float)=φ;
(b)V'=>ε,
First(V'→,V)∩Follow(V)={,,ε}∩{#}=φ
根据LL
(1)文法的定义判断,此文法是LL
(1)文法;
LL
(1)分析表为:
int
float
id
#
D
D→TV
D→TV
T
T→int
T→float
V
V→idV'
V'
V'→,V
V'→ε
6.考虑下面的程序:
…
procedure p(x,y,z);
begin
y:
=y+2;
z:
=z+x;
end
begin
a:
=5;
b:
=2;
p(a+b,a-b,a);
printa
end.
试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出a的值是什么?
解答:
传值a=5
传地址a=12
7.证明下述文法G:
SaSbS|aS|d是二义性文法。
证明:
一个文法,如果存在某个句子有不只一棵语法分析树与之对应,那么称这个文法是二义性文法。
句子aadbd有两棵语法树。
如下图:
(1)
(2)
8.设有基本块如下:
T1:
=S+R
T2:
=3
T3:
=12/T2
T4:
=S/R
A:
=T1-T4
T5:
=S+R
B:
=T5
T6:
=T5*T3
B:
=T6
(1)画出DAG图;
(2)设A,B是出基本块后的活跃变量,请给出优化后的四元式序列。
解答:
(1)DAG如右图:
(2)四元式序列:
T1:
=S+R
T4:
=S/R
A:
=T1-T4
B:
=T1*4
9.设文法G(S):
S→(T)|aS|a
T→T,S|S
(1)消除左递归和提公共左因子;
(2)构造相应的FIRST和FOLLOW集合;
(3)构造预测分析表。
解答:
(1)S→(T)|aS’
S’→S|ε
T→ST’
T’→,ST’|ε
(2)FIRST(S)={a,(}FIRST(S’)={a,(,ε}
FIRST(T)={a,(}FIRST(T’)={,,ε}
FOLLOW(S)={,,),#}FOLLOW(S’)={,,),#}
FOLLOW(T)={)}FOLLOW(T’)={)}
(3)
(
)
a
#
S
S→(T)
S→aS’
S’
S’→S
S’→ε
S’→S
S’→ε
S’→ε
T
T→ST’
T→ST’
T’→,ST’
T’
T’→ε
11.已知文法G[S]为S→aSb|Sb|b,试证明文法G[S]为二义文法。
证明:
由文法G[S]:
S→aSb|Sb|b,对句子aabbbb对应的两棵语法树为:
因此,文法G[S]为二义文法。
12.考虑下面的程序:
…
procedure p(x,y,z);
begin
y:
=y+2;
z:
=z+x;
end
begin
a:
=5;
b:
=2;
p(a+b,a-b,a);
printa
end.
试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出a的值是什么?
答案:
传值a=2
传地址a=15
13.写出表达式a:
=(b+c)*e+(b+c)/f的逆波兰式和三元序列。
逆波兰式abc+e*bc+f/+:
=
三元序列oparg1arg2
(1)+bc
(2)*
(1)e
(3)+bc
(4)/(3)f
(5)+
(2)(4)
(6):
=a(5)
14.什么是句柄?
什么是素短语?
一个句型的最左直接短语称为该句型的句柄。
素短语是这样的一个短语,它至少包含一个终结符并且不包含更小的素短语。
15.已知文法G[S]
S→S*aF|aF|*aF
F→+aF|+a
消除文法左递归和提公共左因子。
解答:
消除左递归
S→aFS’|*aFS’
S’→*aFS’|ε
F→+aF|+a
提公共左因子,文法G’(S)
S→aFS’|*aFS’
S’→*aFS’|ε
F→+aF’
F’→F|ε
16.对于文法G[S]:
SAB,AAa|bB,Ba|Sb求句型baSb的全部短语、直接短语和句柄?
句型baSb的语法树如图五
(2)所示。
图:
句型baSb的的语法树
解:
baSb为句型baSb的相对于S的短语,ba为句型baSb的相对于A的短语,Sb为句型baSb的相对于B的短语,且为直接短语,a为句型baSb的相对于B的短语,且为直接短语和句柄。
17.已知文法G(S)
S→aAcBe
A→Ab|b
B→d
(1)给出句子abbcde的最左推导及画出语法树;
(2)给出句型aAbcde的短语、素短语。
解答:
(1)S=>aAcBe=>aAbcBe=>abbcBe=>abbcde
(2)短语:
aAbcde,Ab,d
素短语:
Ab,d
18.已知文法G(S)
E→E+T|T
T→T*F|F
F→(E)|i
(1)给出句型(i+i)*i+i的最左推导及画出语法树;
(2)给出句型(E+T)*i+F的短语,素短语和最左素短语。
解答:
(1)E=>E+T=>T+T=>T*F+T=>F*F+T=>(E)*F+T=>(E+T)*F+T=>(T+T)*F+T
=>(F+T)*F+T=>(i+T)*F+T=>(i+F)*F+T=>(i+i)*F+T=>(i+i)*i+T
=>(i+i)*i+F=>(i+i)*i+i
(2)短语i,F,E+T,(E+T),(E+T)*i,(E+T)*i+F
素短语i,E+T
最左素短语E+T
19.何谓优化?
按所涉及的程序范围可分为哪几级优化?
优化:
对程序进行各种等价变换,使得从变换后的程序出发,能产生更有效的目标代码。
三种级别:
局部优化、循环优化、全局优化
20.目标代码有哪几种形式?
生成目标代码时通常应考虑哪几个问题?
目标代码通常采用三种形式:
机器语言,汇编语言,待装配机器语言模块。
应着重考虑的问题:
(1)如何使生成的目标代码较短;
(2)如何充分利用寄存器,以减少访问内存次数;
(3)如何充分利用指令系统的特点。
21.一字母表Σ={a,b},试写出Σ上所有以a为首的字组成的正规集相对应的正规式。
解答:
正规式a(a|b)*。
22.设有基本块
D:
=A-C
E:
=A*C
F:
=D*E
S:
=2
T:
=A-C
Q:
=A*C
G:
=2*S
J:
=T*Q
K:
=G*5
L:
=K+J
M:
=L
假设基本块出口时只有M还被引用,请写出优化后的四元序列。
解答:
优化后的四元序列
D:
=A-C
E:
=A*C
F:
=D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 试题库