编译原理模拟题合集.docx
《编译原理模拟题合集.docx》由会员分享,可在线阅读,更多相关《编译原理模拟题合集.docx(14页珍藏版)》请在冰豆网上搜索。
编译原理模拟题合集
编译原理
一、填空题(20分)
1.1编译程序的工作过程可划分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等阶段,一般在语义分析阶段对表达式中运算对象的类型进行检查。
1.2递归下降法和预测分析法是自上而下的语法分析方法。
1.3常用的存储分配策略有静态存储分配和动态存储分配,其中,动态存储分配策略包括栈分配和堆分配。
1.4移进、归约是自下而上或LR分析中的典型操作。
1.5对于数组M[1..6,1..8],如果每个元素占k个存储单元,且起始地址为a,则以行为主序存放时元素M[4,4]的地址是__a+27*k__,以列为主序存放时元素M[4,4]的地址是_a+21k__。
1.1LR
(1)分析法中,L的含义是自左至右扫描输入串,R的含义是最右推导的逆。
1.2源程序经过编译后产生的程序称为目标程序。
1.3词法分析的输出由单词种别和单词的值两部分组成。
1.4文法G:
S→AB,A→aA|ε,B→bBc|bc描述的语言L(G)={ambkck|m>=1,k>=0}。
1.5允许用户随意地动态申请与释放内存空间应采用_堆_存储分配技术。
1.6一个文法产生的_句子的全体_称为该文法的语言。
1.7语义错误可分为静态语义错误和动态语义错误,“运算符与运算对象的类型不一致”属于_静态语义_错误,“无穷递归”属于_动态语义_错误。
1.1出错处理和符号表管理是编译程序各阶段都涉及到的工作。
1.2用LR方法实现语法分析时,典型的操作有__移进__、___归约__、接受和报错。
1.3一个上下文无关文法(N,T,P,S)的四个组成部分是终结符集合N、非终结符集合T、产生式集合和开始符号。
1.4已知数组M[1..5,1..8]以行为主序存放,如果每个元素占4个存储单元,且起始地址为a,则元素M[4,7]的地址是__a+120__。
数组元素的地址计算公式由两部分组成,一部分是不变部分,它在__编译__时确定;另一部分是可变部分,它在__运行__时确定。
1.5表达式(a+b)*c-d的逆波兰(后缀)表达式为__ab+c*d-__。
二、单选题(20分)
2.1词法分析器不能D。
A.识别出数值常量B.过滤源程序中的注释
C.扫描源程序并识别记号D.发现括号不匹配
2.2给定文法A→bA|ca,C是该文法的句子。
A.bbaB.cabC.bcaD.cba
2.3一个句型中的最左B称为该句型的句柄。
A.短语B.直接短语C.非终结符号D.终结符号
2.4已知文法G[S]:
S→A1A→A1|S0|0。
与G等价的正规式是C。
A.0(0|1)*B.1*|0*1C.0(1|10)*1D.1(10|01)*0
2.5源程序是句子的集合,B可以较好地反映句子的结构。
A.线性表 B.树C.完全图 D.堆栈
2.6与逆波兰式ab+c*d+对应的中缀表达式是B。
A.a+b+c*dB.(a+b)*c+dC.(a+b)*(c+d)D.a+b*c+d
2.7识别上下文无关语言的自动机是A。
A.下推自动机B.NFAC.DFAD.图灵机
2.8B是与规范归约(最左归约)互逆的一个过程。
A.最左推导 B.最右推导C.词法分析 D.语义分析
2.9文法G产生的A的全体是该文法描述的语言,
A.句子 B.短语C.终结符 D.非终结符
2.10在表达式x:
=y+1中,A作为左值出现(其中,“:
=”表示赋值)。
A.x B.yC.1 D.y+1
2.1编译程序是对___D___。
A.汇编语言的翻译B.高级语言的解释执行
C.机器语言的执行D.高级语言的翻译
2.2编译过程中C阶段不是必需的。
A.语法分析B.语义分析C.代码优化D.目标代码生成
2.3为数组声明a:
array[1..4,0..3]中a分配的存储空间的首地址为base_a,且每个数组元素占据一个存储单元。
若以行为主存放,数组元素a[3,1]在存储空间中相对base_a的偏移量是B。
A.8B.9C.10D.11
2.4识别正则语言的自动机是B。
A.下推自动机B.有限自动机C.线性界限自动机D.图灵机
2.5表达式“a+b*(c-d)”的后缀式为B。
A.ab+cd-*B.abcd-*+C.ab+*cd-D.abcd*+-
2.6一个文法产生的语言是指D。
A.从开始符号出发推导的所有符号串的集合
B.所有终结符和非终结符形成的集合
C.所有短语构成的集合
D.该文法产生的句子的集合
2.7函数(或过程)调用时,A。
A.值调用方式下将实参的右值传递给形参,引用调用方式下将实参的左值传递给形参
B.值调用方式下将实参的左值传递给形参,引用调用方式下将实参的右值传递给形参
C.值调用方式下将形参的右值传递给实参,引用调用方式下将形参的左值传递给实参
D.值调用方式下将形参的左值传递给实参,引用调用方式下将形参的右值传递给实参
2.8用来描述控制进入和离开活动方式的树结构被称为C。
A.语法树B.分析树C.活动树D.嵌套关系树
2.9不含子串100的所有0、1符号串的正规式是A。
A.0*(1|10)*B.1*|0*1C.0(01|10)*1D.1(10|01)*0
2.10B是与规范归约(最左归约)互逆的一个过程。
A.最左推导 B.最右推导C.词法分析 D.语义分析
2.1生成中间代码所依据的是_____C_____。
A.语法规则B.词法规则C.语义规则D.等价变换规则
2.2一个句型中的最左____B____称为该句型的句柄。
A.短语B.直接短语C.非终结符号D.终结符号
2.3给定文法A→bA|cc,____D____是该文法的句子。
A.ccbcB.bcbcC.cbcbD.bbcc
2.4程序设计语言中大多数的语法现象可用Chomsky的____C____文法表示。
A.0型(短语结构文法)B.1型(上下文有关文法)
C.2型(上下文无关文法)D.3型(正规文法)
2.5有限状态自动机可以识别的语言为____D____。
A.上下文有关语言B.上下文无关语言
C.短语文法定义的语言D.正规文法定义的语言
2.6有文法G:
S→AA,A→Aa|a。
G不是LL
(1)文法的理由是____C_____。
A.FIRST(S)∩FIRST(A)≠
B.FIRST(A)∩FOLLOW(A)≠
C.FIRST(Aa)∩FIRST(a)≠
D.都不是
2.7表达式的类型检查工作在______C_____阶段进行。
A.语法分析B.词法分析C.语义分析D.优化
2.8编译器分析源程序时遇到的错误可分为语法错误和语义错误两类,____A_____。
A.表达式中括号不匹配是语法错误,运算对象与运算符号不匹配是语义错误
B.表达式中括号不匹配是语义错误,运算对象与运算符号不匹配是语法错误
C.表达式中括号不匹配和运算对象与运算符号不匹配都是语法错误
D.表达式中括号不匹配和运算对象与运算符号不匹配都是语义错误
2.9已知某高级语言源程序A经编译后得到机器C上的目标程序B,则A。
A.对B进行反编译,不能还原出源程序A
B.对B进行反汇编,不能得到与源程序A等价的汇编程序代码
C.对B进行反编译,得到的是源程序A的变量声明和算法流程
D.对A和B进行交叉编译,可以产生在机器C上运行的动态链接库
2.10集合
D。
A.可用正规式“
”表示
B.不能用正规式表示,但可用非确定的有限自动机识别
C.可用正规式“
”表示
D.不能用正规式表示,但可用上下文无关文法表示
三、简答题(30分)
3.1(5分)请分别写出传值调用、引用调用方式下,下面代码的输出结果。
programmain(input,output)
proceduref(a,b)
begin
a:
=b-a;
b:
=a*b+1;
end;
begin
x:
=5;y:
=10;
f(y,x);
print(x,y);
end.
传值调用方式:
510
引用调用方式:
-24-5
3.2(10分)请计算下面文法G(E)中各非终结符的FIRST和FOLLOW集合。
请说明该文法为什么不是LL
(1)文法。
G(E):
E→E*T|TT→T-F|FF→(E)|id
FIRST(F)=FIRST(T)=FIRST(E)={(,id}
FOLLOW(E)={#,*,)}FOLLOW(T)={-,*,#,)}FOLLOW(F)={-,*,#,)}
3.3(10分)下图所示的分析树用到了某个上下文无关文法的所有产生式。
(a)给出该文法的所有非终结符号集合N和终结符号集合T。
(b)给出该文法的产生式集合。
N={S,A,B}
T={a,b,c,d}
S→aAcB|BdA→AaB|cB→bScA|b|ε
3.4(5分)某程序执行到某一时刻时控制栈中的内容如下所示(其中M是主程序,P、Q、R、S均是过程),给出所有在生存期的活动的调用关系(提示:
若A调用B,则记为A→B)。
M→P→R→Q→S→S
3.1(10分)对下述C++程序,(a)指出各参数的传递方式;(b)给出程序的执行结果。
voidf(inta,int&b,int&c){c=c+10;b=a*b+c;}
voidmain()
{intx=10,y=25,z=0,t=0;
z=x+y*10;
f(x+y,x,z);cout<<"1:
"<t=x+y;
f(t,x,z);cout<<"2:
"<}
(a)参数a采用传值方式,参数b和c采用传引用方式
(b)1:
6202:
400180
3.2(10分)请简要说明进行自上而下的语法分析时,文法中为什么不能有左递归和公共左因子。
进行自上而下的语法分析时,若存在左递归,则可能在分析某些句子时陷入死循环;若存在公共左因子,则可能因为虚假匹配导致需要回溯,从而降低分析效率。
3.3(10分)举例说明下述文法G是二义的。
有哪些方法可以消除文法的二义性。
G:
S→aA|BbA→bA|εB→a
以句子“ab“为例,其分析树可有如下两种形式:
即句子“ab”存在不同的最左推导S=>aA=>abA=>ab和S=>Bb=>ab,因此文法G是二义的。
消除文法二义性的方法主要有两种:
一是改写文法为非二义的:
二是规定优先级和结合性,限