故选c。
5、如果文法G无二义性,则最左推导是先生长右边的枝叶:
对于d,如果有两个不同的是了左推导,则必然有二义性。
故选a。
6、选c。
7、由图2-8-1的语法树和优先关系可以看出应选b。
8、规范推导是最左推导,故选d。
9、由T→T,…和T→(…得FIRSTVT(T))={(,,)};
由T→S得FIRSTVT(S)⊂FIRSTVT(T),而FIRSTVT(S)={b,∧,(};即
FIRSTVT(T)={b,∧,(,,};因此选c。
10、d11、c12、b13、b14、b
二、多项选择题
1、下面哪些说法是错误的。
a.有向图是一个状态转换图b.状态转换图是一个有向图
c.有向图是一个DFAd.DFA可以用状态转换图表示
2、对无二义性文法来说,一棵语法树往往代表了。
a.多种推导过程b.多种最左推导过程c.一种最左推导过程
d.仅一种推导过程e.一种最左推导过程
3、如果文法G存在一个句子,满足下列条件之一时,则称该文法是二义文法。
a.该句子的最左推导与最右推导相同
b.该句子有两个不同的最左推导
c.该句子有两棵不同的最右推导
d.该句子有两棵不同的语法树
e.该句子的语法树只有一个
4、有一文法G:
S→AB
A→aAb|ε
B→cBd|ε
它不产生下面集合。
a.{anbmcndm|n,m≥0}b.{anbncmdm|n,m>0}
c.{anbmcmdn|n,m≥0}d.{anbncmdm|n,m≥0}
e.{anbncndn|n≥0}
5、自下而上的语法分析中,应从开始分析。
a.句型b.句子c.以单词为单位的程序
d.文法的开始符e.句柄
6、对正规文法描述的语言,以下有能力描述它。
a.0型文法b.1型文法c.上下文无关文法d.右线性文法e.左线性文法
解答1、e、a、c2、a、c、e3、b、c、d4、a、c5、b、c6、a、b、c、d、e
三、填空题
1、文法中的终结符和非终结符的交集是。
词法分析器交给语法分析器的文法符号一定是,它一定只出现在产生式的部。
2、最左推导是指每次都对句型中的非终结符进行扩展。
3、在语法分析中,最常见的两种方法一定是分析法,另一是分析法。
4、采用语法分析时,必须消除文法的左递归。
5、树代表推导过程,树代表归约过程。
6、自下而上分析法采用、归约、错误处理、等四种操作。
7、Chomsky把文法分为种类型,编译器构造中采用和文法,它们分别产生和语言,并分别用和自动机识别所产生的语言。
解答1、空集终结符右
2、最左
3、自上而上自下而上
4、自上而上
5、语法分析
6、移进接受
7、42型3型上下文无关语言正规语言下推自动机有限
四、判断题
1、文法S→aS|bR|ε描述的语言是(a|bc)*()
R→cS
2、在自下而上的语法分析中,语法树与分析树一定相同。
()
3、二义文法不是上下文无关文法。
()
4、语法分析时必须先消除文法中的左递归。
()
5、规范归约和规范推导是互逆的两个过程。
()
6、一个文法所有句型的集合形成该文法所能接受的语言。
()
解答1、对2、错3、错4、错5、错6、错
五、简答题
1、句柄2、素短语3、语法树4、归约5、推导
[解答]
1、句柄:
一个句型的最左直接短语称为该句型的句柄。
2、素短语:
至少含有一个终结符的素短语,并且除它自身之外不再含任何更小的素短语。
3、语法树:
满足下面4个条件的树称之为文法G[S]的一棵语法树。
①每一终结均有一标记,此标记为VN∪VT中的一个符号;
②树的根结点以文法G[S]的开始符S标记;
③若一结点至少有一个直接后继,则此结点上的标记为VN中的一个符号;
④若一个以A为标记的结点有K个直接后继,且按从左至右的顺序,这些结点的标记分别为X1,X2,…,XK,则A→X1,X2,…,XK,必然是G的一个产生式。
4、归约:
我们称αγβ直接归约出αAβ,仅当A→γ是一个产生式,且α、β∈(VN∪VT)*。
归约过程就是从输入串开始,反复用产生式右部的符号替换成产生式左部符号,直至文法开始符。
5、推导:
我们称αAβ直接推出αγβ,即αAβÞαγβ,仅当A→γ是一个产生式,且α、β∈(VN∪VT)*。
如果α1Þα2Þ…Þαn,则我们称这个序列是从α1至α2的一个推导。
若存在一个从α1αn的推导,则称α1可推导出αn。
推导是归约的逆过程。
六、问答题
1、给出上下文无关文法的定义。
[解答]
一个上下文无关文法G是一个四元式(VT,VN,S,P),其中:
●VT是一个非空有限集,它的每个元素称为终结符号;
●VN是一个非空有限集,它的每个元素称为非终结符号,VT∩VN=Φ;
●S是一个非终结符号,称为开始符号;
●P是一个产生式集合(有限),每个产生式的形式是P→α,其中,P∈VN,
α∈(VT∪VN)*。
开始符号S至少必须在某个产生式的左部出现一次。
2、文法G[S]:
S→aSPQ|abQ
QP→PQ
bP→bb
bQ→bc
cQ→cc
(1)它是Chomsky哪一型文法?
(2)它生成的语言是什么?
[解答]
(1)由于产生式左部存在终结符号,且所有产生式左部符号的长度均小于等于产生式右部的符号长度,所以文法G[S]是Chomsky1型文法,即上下文有关文法。
(2)按产生式出现的顺序规定优先级由高到低(否则无法推出句子),我们可以得到:
SÞabQÞabc
SÞaSPQÞaabQPQÞaabPQQÞaabbQQÞaabbcQÞaabbcc
SÞaSPQÞaaSPQPQÞaaabQPQPQÞaaabPQQPQÞaaabPQPQQÞaaaPPQQQÞ
aaabbPqqqÞaaabbQQQÞaaabbbcQQÞaaabbbccQÞaaabbbccc
……
于是得到文法G[S]生成的语言L={anbncn|n≥1}
3、按指定类型,给出语言的文法。
L={aibj|j>i≥1}的上下文无关文法。
【解答】
(1)由L={aibj|j>i≥1}知,所求该语言对应的上下文无关文法首先应有S→aSb型产生式,以保证b的个数不少于a的个数;其次,还需有S→Sb或S→bS型的产生式,用以保证b的个数多于a的个数;也即所求上下文无关文法G[S]为:
G[S]:
S→aSb|Sb|b
4、有文法G:
S→aAcB|Bd
A→AaB|c
B→bScA|b
(1)试求句型aAaBcbbdcc和aAcbBdcc的句柄;
(2)写出句子acabcbbdcc的最左推导过程。
【解答】
(1)分别画出对应两句型的语法树,如图2-8-2所示
句柄:
AaBBd
图2-8-2语法树
(2)句子acabcbbdcc的最左推导如下:
SÞaAcBÞaAaBcBÞacaBcBÞacabcBÞacabcbScAÞacabcbBdcA
ÞacabcbbdcAÞacabcbbdcc
5、对于文法G[S]:
S→(L)|aS|aL→L,S|S
(1)画出句型(S,(a))的语法树。
(2)写出上述句型的所有短语、直接短语、句柄和素短语。
【解答】
(1)句型(S,(a))的语法树如图2-8-3所示
(2)由图2-8-3可知:
①短语:
S、a、(a)、S,(a)、(S,(a));
②直接短语:
a、S;
③句柄:
S;
④素短语:
素短语可由图2-8-3中相邻终结符之间的优先关系求得,即;
因此素短语为a。
6、考虑文法G[T]:
T→T*F|F
F→F↑P|P
P→(T)|i
证明T*P↑(T*F)是该文法的一个句型,并指出直接短语和句柄。
【解答】
首先构造T*P↑(T*F)的语法树如图2-8-4所示。
由图2-8-4可知,T*P↑(T*F)是文法G[T]的一个句型。
直接短语有两个,即P和T*F;句柄为P。
一、单项选择题
1、词法分析所依据的是。
a.语义规则b.构词规则c.语法规则d.等价变换规则
2、词法分析器的输出结果是。
a.单词的种别编码b.单词在符号表中的位置
c.单词的种别编码和自身值d.单词自身值
3、正规式M1和M2等价是指。
a.M1和M2的状态数相等b.M1和M2的有向弧条数相等
c.M1和M2所识别的语言集相等d.M1和M2状态数和有向弧条数相等
4、状态转换图(见图3-6-1)接受的字集为。
a.以0开头的二进制数组成的集合b.以0结尾的二进制数组成的集合
c.含奇数个0的二进制数组成的集合d.含偶数个0的二进制数组成的集合
5、词法分析器作为独立的阶段使整个编译程序结构更加简洁、明确,因此,。
a.词法分析器应作为独立的一遍b.词法分析器作为子程序较好
c.词法分析器分解为多个过程,由语法分析器选择使用d.词法分析器并不作为一个独立的阶段
解答1、b2、c3、c4、d5、b
二、多项选择题
1、在词法分析中,能识别出。
a.基本字b.四元式c.运算符
d.逆波兰式e.常数
2、令∑={a,b},则∑上所有以b开头,后跟若干个ab的字的全体对应的正规式为。
a.b(ab)*b.b(ab)+c.(ba)*b
d.(ba)+be.b(a|b)
解答1、a、c、e2、a、b、d
三、填空题
1、确定有限自动机DFA是的一个特例。
2、若二个正规式所表示的相同,则认为二者是等价的。
3、一个字集是正规的,当且仅当它可由所。
解答1、NFA2、正规集3、DFA(NFA)所识别
四、判断题
1、一个有限状态自动机中,有且仅有一个唯一终态。
()
2、设r和s分别是正规式,则有L(r|s)=L(r)|L(s)。
()
3、自动机M和M′的状态数不同,则二者必不等价。
()
4、确定的自动机以及不确定的自动机都能正确地识别正规集。
()
5、对任意一个右线性文法G,都存在一个NFAM,满足L(G)=L(M)。
()
6、对任意一个右线性文法G,都存在一个DFAM,满足L(G)=L(M)。
()
7、对任何正规表达式e,都存在一个NFAM,满足L(G)=L(e)。
()
8、对任何正规表达式e,都存在一个DFAM,满足L(G)=L(e)。
()
解答1、2、3、错4、5、6、7、8、正确
五、基本题
1、设M=({x,y},{a,b},f,x,{y})为一非确定的有限自动机,其中f定义如下:
f(x,a)={x,y}f(x,b)={y}
f(y,a)=φf(y,b)={x,y}
试构造相应的确定有限自动机M′。
解答:
对照自动机的定义M=(S,Σ,f,S0,Z),由f的定义可知f(x,a)、f(y,b)均为多值函数,所以是一非确定有限自动机,先画出NFAM相应的状态图,如图3-6-2所示。
用子集法构造状态转换矩阵表3-6-3所示。
IIaIb
{x}{x,y}{y}
{y}—{x,y}
{x,y}{x,y}{x,y}
将转换矩阵中的所有子集重新命名而形成表3-6-4所示的状态转换矩阵。
表3-6-4状态转换矩阵
ab
021
1—2
222
即得到M′=({0,1,2},{a,b},f,0,{1,2}),其状态转换图如图3-6-5所示。
将图3-6-5的DFAM′最小化。
首先,将M′的状态分成终态组{1,2}与非终态组{0};其次,考察{1,2}。
由于{1,2}a={1,2}b={2}⊂{1,2},所以不再将其划分了,也即整个划分只有两组{0},{1,2}:
令状态1代表{1,2},即把原来到达2的弧都导向1,并删除状态2。
最后,得到如图3-6-6所示化简DFAM′。
2、对给定正规式b*(d|ad)(b|ab)+,构造其NFAM;
解答:
首先用A+=AA*改造正规式得:
b*(d|ad)(b|ab)(b|ab)*;其次,构造该正规式的NFAM,如图3-6-7所示。
【<编译原理>历年试题附参考答案】
来源:
刘龙的日志
<编译原理>历年试题及答案
一.(每项选择2分,共20分)选择题
1.将编译程序分成若干个“遍”是为了___b。
a.提高程序的执行效率
b.使程序的结构更加清晰
c.利用有限的机器内存并提高机器的执行效率
d.利用有限的机器内存但降低了机器的执行效率
2.构造编译程序应掌握____d。
a.源程序b.目标语言
c.编译方法d.以上三项都是
3.变量应当_c。
a.持有左值b.持有右值
c.既持有左值又持有右值d.既不持有左值也不持有右值
4.编译程序绝大多数时间花在____d上。
a.出错处理b.词法分析
c.目标代码生成d.管理表格
5.词法分析器的输出结果是____c。
a.单词的种别编码b.单词在符号表中的位置
c.单词的种别编码和自身值d.单词自身值
6.正规式MI和M2等价是指____c。
a.MI和M2的状态数相等b.Ml和M2的有向弧条数相等。
C.M1和M2所识别的语言集相等d.Ml和M2状态数和有向弧条数相等
7.中间代码生成时所依据的是___c。
a.语法规则b.词法规则c.语义规则d.等价变换规则
8.后缀式ab+cd+/可用表达式___b来表示。
a.a+b/c+db.(a+b)/(c+d)c.a+b/(c+d)d.a+b+c/d
9.程序所需的数据空间在程序运行前就可确定,称为_____c管理技术。
a.动态存储b.栈式存储c.静态存储d.堆式存储
10.堆式动态分配申请和释放存储空间遵守_______d原则。
a.先请先放b.先请后放c.后请先放d.任意
二(每小题10分,共80分)简答题
1.画出编译程序的总体结构图,简述各部分的主要功能。
2.已知文法G[E]:
E→ET+|TT→TF*|FF→F^|a
试证:
FF^^*是文法的句型,指出该句型的短语、简单短语和句柄.
3.为正规式(a|b)*a(a|b)构造一个确定的有限自动机。
4.设文法G(S):
S→(L)|aS|a
L→L,S|S
(1)消除左递归和回溯;
(2)计算每个非终结符的FIRST和FOLLOW;
(3)构造预测分析表。
5.已知文法
A->aAd|aAb|ε
判断该文法是否SLR
(1)文法,若是构造相应分析表,并对输入串ab#给出分析过程。
6.构造算符文法G[H]的算符优先关系(含#)。
G[H]:
H→H;M|M
M→d|aHb
7.已构造出文法G(S)
(1)SBB
(2)BaB
(3)Bb
1)。
给出DFA图
2).给出LR分析表
3).假定输入串为abaab,请给出LR分析过程(即状态,符号,输入串的变化过程)。
8.将下面的语句翻译成四元式序列:
whileAifA=1thenC:
=C+l
elsewhileA≤Ddo
A:
=A+2;
9.对下面的流图,
(1)求出流图中各结点N的必经结点集D(n),
(2)求出流图中的回边,
(3)求出流图中的循环。
参考答案:
一.单项选择题
1.将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。
2..构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。
3.对编译而言,变量既持有左值又持有右值,故选c。
4.编译程序打交道最多的就是各种表格,因此选d。
5.词法分析器输出的结果是单词的种别编码和自身值,选C。
6.正规式M1和M2所识别的语言集相等,故选C。
7.选c。
8.选b。
9.选C
10.堆式动态分配申请和释放存储空间不一定遵守先请后放和后请先放的原则,故选d
二.简答题
1.【解答】
编译程序的总体结构图如图1.2所示。
词法分析器:
输入源程序,进行词法分析,输出单词符号。
语法分析器:
在词法分析的基础上,根据语言的语法规则(文法规则)把单词符号串分
解成各类语法单位,并判断输入串是否构成语法上正确的“程序”。
中间代码生成器:
按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定
形式的中间代码,比如说四元式。
优化:
对中间代码进行优化处理。
目标代码生成器:
把中间代码翻译成目标语言程序。
表格管理模块保存一系列的表格,登记源程序的各类信息和编译各阶段的进展情况。
编
译程序各阶段所产生的中间结果都记录