编译原理作业集第三章修订版.docx
《编译原理作业集第三章修订版.docx》由会员分享,可在线阅读,更多相关《编译原理作业集第三章修订版.docx(23页珍藏版)》请在冰豆网上搜索。
编译原理作业集第三章修订版
第三章词法分析
本章要点
1.词法分析器设计,
2.正规表达式与有限自动机,
3.词法分析器自动生成。
本章目标:
1.理解对词法分析器的任务,掌握词法分析器的设计;
2.掌握正规表达式与有限自动机;
3.掌握词法分析器的自动产生。
本章重点:
1.词法分析器的作用和接口,用高级语言编写词法分析器等内容,它们与词法分析器的实现有关。
应重点掌握词法分析器的任务与设计,状态转换图等内容。
2.掌握下面涉及的一些概念,它们之间转换的技巧、方法或算法。
(1)非形式描述的语言正规式
(2)正规式NFA(非确定的有限自动机)
(3)NFADFA(确定的有限自动机)
(4)DFA最简DFA
本章难点
(1)非形式描述的语言正规式
(2)正规式NFA(非确定的有限自动机)
(3)NFADFA(确定的有限自动机)
(4)DFA最简DFA
作业题
一、单项选择题
(按照组卷方案,至少15道)
1.程序语言下面的单词符号中,一般不需要超前搜索
a.关键字b.标识符c.常数d.算符和界符
2.在状态转换图的实现中,一般对应一个循环语句
a.不含回路的分叉结点b.含回路的状态结点c.终态结点d.都不是
3.用了表示字母,d表示数字,={l,d},则定义标识符的正则表达式可以是:
。
(a)ld*(b)ll*(c)l(l|d)*(d)ll*|d*
4.正规表达式(ε|a|b)2表示的集合是
(a){ε,ab,ba,aa,bb}(b){ab,ba,aa,bb}
(c){a,b,ab,aa,ba,bb}(d){ε,a,b,aa,bb,ab,ba}
5.有限状态自动机可用五元组(VT,Q,δ,q0,Qf)来描述,设有一有限状态自动机M的定义如下:
VT={0,1},Q={q0,q1,q2},Qf={q2},δ的定义为:
δ(q0,0)=q1 δ(q1,0)=q2
δ(q2,1)=q2 δ(q2,0)=q2
M所对应的状态转换图为。
6.有限状态自动机可用五元组(VT,Q,δ,q0,Qf)来描述,设有一有限状态自动机M的定义如下:
VT={0,1},Q={q0,q1,q2},Qf={q2},δ的定义为:
δ(q0,0)=q1 δ(q1,0)=q2
δ(q2,1)=q2 δ(q2,0)=q2
M所能接受的语言可以用正则表达式表示为。
①(0|1)* ②00(0|1)* ③(0|1)*00 ④0(0|1)*0
7.有限状态自动机可用五元组(VT,Q,δ,q0,Qf)来描述,设有一有限状态自动机M的定义如下:
VT={0,1},Q={q0,q1,q2},Qf={q2},δ的定义为:
δ(q0,0)=q1 δ(q1,0)=q2
δ(q2,1)=q2 δ(q2,0)=q2
M所能接受的语言为。
①由0和1所组成的符号串的集合
②以0为头符号和尾符号、由0和1所组成的符号串的集合
③以两个0结束的,由0和1所组成的符号串的集合
④以两个0开始的,由0和1所组成的符号串的集合
8.从接受语言的能力上来说,非确定型有穷自动机和________是等价的。
a.ⅰ.正规式;ⅱ.上下文无关文法;ⅲ.确定性有穷自动机;
b.ⅰ.左线性正规文法;ⅱ.右线性正规文法;ⅲ.确定性有穷自动机;
c.ⅰ.正规式;ⅱ.上下文无关文法;ⅲ.正规文法;
d.ⅰ.正规式;ⅱ.确定性有穷自动机;ⅲ.下推自动机;
9.下面四个选项中,关于编译过程中扫描器的任务的叙述,________是较为完整且正确的。
①组织源程序的输入;按词法规则分割出单词,识别其属性,并转换成属性字的形式输出;删除注释;删除空格和无用字符;行计数、列计数;发现并定位词法错误;建立符号表。
②按词法规则分割出单词,识别其属性,并转换成属性字的形式输出;发现并定位词法错误;建立符号表;输出状态转换图;把状态转换图自动转换成词法扫描程序。
③组织源程序的输入;按词法规则分割出单词,识别其属性,并转换成属性字的形式输出。
④组织源程序的输入;按词法规则分割出单词,识别其属性,并转换成属性字的形式输出;行计数、列计数;发现并定位词法错误;建立符号表;输出状态转换图;把状态转换图自动转换成词法扫描程序。
10.关于NFA的叙述中,下面______是不正确的。
A.有一个有穷字母表B.有多个初始状态
C.有多个终止状态D.有多个有限状态
11.词法分析的理论基础是。
A.有穷自动机理论B.图灵机理论 C.图论 D.无穷自动机理论
12.设有两个状态S和T,如果从S出发能读出某个字w而停于终态,那么从T出发也能读出同样的字而停于终态;反之,果从T出发能读出某个字w而停于终态,那么从S出发也能读出同样的字而停于终态。
则我们称状态S和状态T是。
A.可区分的;B.等价的;C.多余的;D.无用的。
13.词法分析器的输出结果是。
A、单词自身值B、单词在符号表中的位置
C、单词的种别编码D、单词的种别编码和自身值
14.编译过程中扫描器的任务包括______。
①组织源程序的输入
②按词法规则分割出单词,识别出其属性,并转换成属性字的形式输出
⑧删除注解
④删除空格及无用字符
⑤行计数、列计数
⑥发现并定位词法错误
⑦建立符号表
a.②③④⑦b.②③④⑥⑦c.①②③④⑥⑦d.①②③④⑤⑥⑦
15.下述正则表达式中______与(a*+b)*(c+d)等价(即有相同符号串集)。
(x+y亦可写作x|y)
①a*(c+d)+b(c+d)
②a*(c+d)*+b(c+d)*
③a*(c+d)+b(c+d)
④(a+b)*c+(a+b)*d
⑤(a*+b)*c+(a*+b)*d
a.①③b.③④⑤c.③d.④⑤
16、正则式的“*”读作______。
a,并且L或者c.连接d.闭包
17.在状态转换图中,结点代表,用圆圈表示。
a.输入缓冲区b.向前搜索c.状态d.字符串
18.与(a|b)*(a|b)等价的正规式是。
A.a*|b*B.(ab)*(a|b)*C.(a|b)(a|b)*D.(a|b)*
19.无符号常数的识别和拼数工作通常都在阶段完成。
.{!
u${&`#~#Y"b4qA.词法分析 B.语法分析 C.语义分析 D.代码生成
一.答案:
1.b;2.b;3.c;4.d;5.②;6.②,7.④;8.b;9.①;10.B;11.A;
12.B;13.d;14.d;;;;18.C;19.A
二、填空题:
(按照组卷方案,至少15道)
1.词法分析器对扫描缓冲区进行扫描时一般用两个指示器,一个_________________________________;另一个_____________________________________。
2.一个确定性有限自动机DFAM的化简是指:
寻找一个状态数比M少的DFAM’,使得。
3.词法分析器所的输出常表示成如下形式的二元式:
(______________,_________________)。
4.一个状态转换图只包含有限个状态,其中有一个被认为是________,而且实际上至少有一个________。
5.把状态转换图用程序实现时,对于含有回路的状态结点来说,可以让它对应一个_____________________________________程序段。
6.词法分析阶段的任务式从左到右扫描,从而逐个识别。
7.如果一个种别只含有一个单词符号,那么,对于这个单词符号,就可以完全代表它自身了。
8.单词符号的属性值是指单词符号的特性或特征,其属性值则是反映特性或特征的值。
比如,对于某个标识符,常将作为其属性值。
9.单词符号的属性值是指单词符号的特性或特征,其属性值则是反映特性或特征的值。
比如,对于常数,常将作为其属性值。
10.如果一个种别含有多个单词符号,那么,对于它的每个单词符号,除了给出种别编码以外,还应给出有关。
11.如果,则认为这两个正规式等价。
12.对于*中的任何符号串,如果存在一条从初态结点到某一终态结点的通路,且,则称被该自动机所接受(识别)。
13.一个Lex源程序主要包括两部分,一部分是,另一部分是。
14.一个DFA可用一个矩阵表示,该矩阵的行表示,列表示,矩阵元素表示。
这个矩阵叫状态转换矩阵。
15.对于词法分析程序来说,当程序到达“错误处理”时,意味着现行状态i和当前所面临的输入串不匹配。
如果后面还有状态图,出现在这个地方的代码应该为:
。
二.答案:
1.指向当前正在识别的单词符号的开始位置,用于向前搜索以寻找单词符号的终点;2.L(M)=L(M');3.单词种别,单词符号的属性值;4.初态,终态;5.由while和if语句构成的;6.源程序,单词;7.种别编码;8.存放它的有关信息的符号表项的指针;9.存放它的常数表项的指针;10.单词符号的属性信息(属性值);11.两个正规式所表示的正规集相同;12.这条通路上所有弧的标记符号连接起来形成的符号串等于;13.正规定义式,识别规则;14.状态,输入字符,转换函数(或(s,a))的值;15.将搜索器回退一个位置,并令下一个状态图开始工作。
三、判断题:
(按照组卷方案,至少15道)
1.NFAM的非确定性表现在它有多个终态。
()
2.有穷自动机接受的语言是正则语言。
()
3.若r1和r2是Σ上的正规式,则r1|r2也是。
()
4.设M是一个NFA,并且L(M)={x,y,z},则M的状态数至少为4个。
()
5.令Σ={a,b},则Σ上所有以b为首的字符构成的正规集的正规式为b*(a|b)*。
()
6.对任何一个NFAM,都存在一个DFAM',使得L(M')=L(M)。
()
7.对一个右线性文法G,必存在一个左线性文法G',使得L(G)=L(G'),反之亦然。
()
8.对任意一个右线性文法G,都存在一个NFAM,满足L(G)=L(M)。
()
9.对任意一个右线性文法G,都存在一个DFAM,满足L(G)=L(M)。
()
10.对任何正则表达式r,都存在一个NFAM,满足L(M)=L(r)。
()
11.对任何正则表达式r,都存在一个DFAM,满足L(M)=L(r)。
()
12.一张转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。
( )
13.一个正规式只能对应一个有限状态自动机;()
14.在词法分析的状态转换图中,有些结点是带星号的,这些结点肯定是终态结点。
()
15.适当设置扫描缓冲区的大小(比如容纳256个字符)可以保证单词符号不会被它的边界所打断。
()
四.答案:
1.×;2.;3.;4.×;5.×;6.;7.;8.;9.;10.;11.;12×;13.×;14.;15.×;
四、名词解释:
(按照组卷方案,至少5道)
1.状态转换图;
2.正规式(正规表达式、正则表达式)的形式化定义;
3.给出确定性有限状态自动机的形式化定义;
4.给出非确定性有限状态自动机的形式化定义;
5.DFA状态最小化。
四.答案
1.状态转换图是一张有限方向图,用于识别(或接受)一定的字符串。
在图中,结点代表状态,用圆圈表示;状态之间用箭弧连结;箭弧上的标记(字符)代表在射出结点(即箭弧的始结点)状态下可能出现的字符或字符类。
一张状态转换图只包含有限个状态(即有限个结点),其中一个被认为是初态,而且实际上至少要有一个终态(用双圈表示)。
2.正规式是采用递归方式来定义的。
(1)和都是正规式;
(2)任何a∈,a是上的一个正规式;
(3)假定r和s都是上的正规式,则r|s、rs、和r*也都是正规式。
3.一个确定有限自动机(DFA)M是一个五元式:
M=(S,,,s0,F),其中:
(1)S是一个有限集合,它的每一个元素称为一个状态;
(2)是一个有限字母表,它的每一个元素称为一个输入字符;
(3)是一个从S×到S的单值部分映射。
(s,a)=s',意思是:
当前状态是s,输入字符为a时,自动机将转入下一个状态s'。
s'称为s的后继状态;
(4)s0∈S,是自动机的惟一初态;
(5)FS,是一个终态集合。
一个非确定有限自动机(NFA)M是一个五元式:
M=(S,,,s0,F),其中:
(1)S是一个有限集合,它的每一个元素称为一个状态;
(2)是一个有限字母表,它的每一个元素称为一个输入字符;
(3)是一个从S×到S的子集的映射。
(s,a)={s1,s2,……,sm},意思是:
当前状态是s,输入字符为a时,自动机将转入的下一个状态可能是s1,或者s2,……,或者sm;
(4)s0∈S,是自动机的惟一初态;
(5)FS,是一个终态集合。
五、简答题:
(按照组卷方案,至少5道)
1写出标识符(以字母打头,由字母和数字组成的符号串)的正则表达式。
答:
letterAB...Zab...z
digit01...9
idletter(letterdigit)*
2.词法分析器对程序语言的单词符号一般如何分类
答:
程序语言的单词符号一般可以分为下列五种:
(1)关键字:
是有程序语言所定义的具有固定意义的标识符,有时也称保留字或基本字;
(2)标识符:
用来表示变量名、数组名和过程名等各种名字;
(3)常数:
一般有整型、实型、布尔型和文字型等各种类型,是程序执行过程中不变的量;
(4)运算符:
如+、-、*、/等各种进行算术逻辑运算的符号;
(5)界符:
如逗号、分号、括号等。
3.人运狼、羊、菜过河,一次运一件,不让羊吃掉菜,也不让狼吃掉羊,画出渡河的状态转换图。
可否将其抽象为一个有限自动机
3.先写出渡河的方法,串中对象顺序为人来回渡河时所运的货物的顺序:
①羊空菜羊狼空羊;②羊空狼羊菜空羊
现给出一个NFA:
M=(Σ,Q,0,{9},δ)
其中Σ={羊,空,菜,狼},Q={0,1,2,3,4,5,6,7,8,9},转形函数:
δ(0,羊)=1,δ(1,空)=2,δ(2,菜)=3,δ(2,狼)=5
δ(3,羊)=4,δ(5,羊)=6,δ(4,狼)=7,δ(6,菜)=7
δ(7,空)=8,δ(8,羊)=9
4C语言无符号实数用正则表达式怎么定义
答:
digit01...9
digitsdigit(digit)*
fraction.digits
exponentE(+-)digits)
numdigits(fraction|)(exponent|)
5.分析下面各正规表达式所表示的语言。
(1)(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*
答:
(1){α|α∈{0,1}*,α中有偶数个0和偶数个1},即由偶数个0和偶数个1构成的串。
6.何谓扫描器扫描器的功能是什么
答:
扫描器就是词法分析器,它接受输入的源程序,对源程序进行词法分析,识别出一个个的单词符号,其输出结果是单词符号,供语法分析器使用。
一般把词法分析器安排成一个子程序,每当语法分析器需要一个单词符号时就调用这个子程序。
每一次调用,词法分析器就从输入串中识别出一个单词符号,把它交给语法分析器。
词法分析器工作的第一步是输入源程序文本。
输入串中一般都包含一些没有意义的字符,如:
空白符、跳格符、回车符和换行符等编辑性字符除了出现在文字常数中之外,在别处的任何出现都没有意义,而注解部分几乎允许出现在程序中的任何地方。
它们不是程序的必要组成部分,预处理时可以将其剔掉。
词法分析器一般会构造一个预处理子程序来处理上述任务。
7.试简述有穷状态自动机与正则表达式的等价性概念。
答:
.∑上的非确定有限自动机M所能识别字的全体L(M)是∑上的一个正规集;同时,对于∑上的每个正规集V,存在一个∑上的确定有限自动机M,使得V=L(M)。
六、应用题:
1.有一个语言,它接收Σ={0,1}上所有满足如下条件的字符串:
每个1都有0直接跟在右边。
(1)给出该语言的正规式
(2)画出接收该语言的NFA
(3)把该NFA转换成等价的DFA
(4)对该DFA进行状态最小化
解法1:
(1)按题意相应的正规表达式是0*(0|10)*0*或0*(100*)*0*。
(2)构造NFA为
0*的NFA为:
0|10的NFA为:
(0|10)*的NFA为:
0*(0|10)*0*的NFA为(给各个结点标上序号)
(3)用子集法确定化
I
I0
I1
{0,1,3,4,5,6,9,13,14,15,17}
————————————————{2,7,16}={1,2,3,4,5,6,9,13,14,15,17}∪{5,7,8,9,13,14,15,17}∪{15,16,17}={1,2,3,4,5,6,7,8,9,13,14,15,16,17}
——————{10}={10,11}
{1,2,3,4,5,6,7,8,9,13,14,15,16,17}
————————————————{2,7,16},同上
——————{10}同上
{10,11}
——————{12}={5,6,8,9,12,13,14,15,17}
{5,6,8,9,12,13,14,15,17}
————————————{7,16}={5,6,7,8,9,13,14,15,16,17}
——————{10}旧态
{5,6,7,8,9,13,14,15,16,17}
————————————{7,16}旧态
——————{10}旧态
令:
{0,1,3,4,5,6,9,13,14,15,17}=A;
{1,2,3,4,5,6,7,8,9,13,14,15,16,17}=B;
{10,11}=C;
{5,6,8,9,12,13,14,15,17}=D;
{5,6,7,8,9,13,14,15,16,17}=E;
画出DFA如图所示:
(4)对该DFA进行状态最小化
={I
(1),I
(2)}={{C},{A,B,D,E}}
I
(1)={C}不可再分;
看I
(2)={A,B,D,E}:
{A,B,D,E}0={B,E},落入了I
(2);
{A,B,D,E}1={C},落入了I
(1);
所以,{A,B,D,E}是等价状态,不再分;
因此,从{A,B,D,E}中抽取一个状态作为代表,C不变,得到简化了的DFA如图所示:
解法2:
(2)构造NFA为
(3)用子集法确定化
I
I0
I1
S
0
1
{X,0,1,3,Y}
{0,1,3,Y}
{2}
{1,3,Y}
{0,1,3,Y}
{0,1,3,Y}
{1,3,Y}
{1,3,Y}
{2}
{2}
/
{2}
1
2
3
4
2
2
4
4
3
3
3
DFA为:
(4)可最小化,终态组为{A,B,D},非终态组为{C};
{A,B,D}0
{A,B,D},
{A,B,D}1
{C},
所以A,B,D为等价状态,可合并。
2.已知字母表={a,b}上语言L={w|w中a的个数是偶数}。
(1)给出该语言的正规式
(2)画出接收该语言的NFA
(3)把该NFA转换成等价的DFA
(4)对该DFA进行状态最小化
2解法1:
(1)语言L的正规式是:
(ab*a|b)*或b*(ab*ab*)*
(2)画出接收该语言的NFA
(3)NFA转换成DFA
I
Ia
Ib
S
a
B
{1,2,3,12,13}
————{4}={4,5,6,8,9}
————{14}={2,3,11,12,13,14}
A
B
C
{4,5,6,8,9}
————{10}={2,3,10,11,12,13}
————{7}={6,7,8,9}
B
D
E
{2,3,11,12,13,14}
————{4}={4,5,6,8,9}
————{14}={2,3,11,12,13,14}
C
B
C
{2,3,10,11,12,13}
————{4}={4,5,6,8,9}
————{14}={2,3,11,12,13,14}
D
B
C
{6,7,8,9}
————{10}={2,3,10,11,12,13}
————{7}={6,7,8,9}
E
D
E
得到的DFA为:
(4)对该DFA进行状态最小化
={I
(1),I
(2)}={{B,E},{A,C,D}}
∵{B,E}a={D},落入I
(2)中;{B,E}b={E};落入I
(1)中;
∴I
(1)={B,E}不必再分。
∵I
(2)}={A,C,D}a={B},落入I
(1)中;I
(2)}={A,C,D}b={C},落入I
(2)中;
∴I
(2)}={A,C,D}不必再分。
故,得到的接受该语言的最简DFA是:
解法2
(2)画出接收该语言的NFA
(3)NFA转换成DFA
I
Ia
Ib
S
a
B
{1,3}
————{2}={2}
————{3}={1,3}
A
B
A
{2}
————{3}={1,3}
————{2}={2}
B
A
B
得到的DFA如下:
(4)对该DFA进行状态最小化
无法再分。
3.有一个语言,它接收Σ={0,1}上的含奇数个1的所有串。
(1)给出该语言的正规式
(2)画出接收该语言的NFA
(3)把该NFA转换成等价的DFA
(4)对该DFA进行状态最小化
提示:
正则表达式为0*1(0|10*1)*。
4.已知Σ={0,1}上正则表达式为0(0|1)*0,
(1)该正则表达式所定义的语言是什么
(2)画出接收该语言的NFA
(3)把该NFA转换成等价的DFA
(4)对该DFA进行状态最小化
提示:
(1)以0开头并且以0结尾的,由0和1组成的符号串。
5已知Σ={0,1}上正则表达式为(0|1)*0(0|1)(0|1),
(1)该正则表达式所定义的语言是什么
(2)画出接收该语言的NFA
(3)把该NFA转换成等价的DFA
(4)对该DFA进行状态最小化
提示:
(1)由0和1组成的符号串,且从右边开始数第3位为0。
6已知Σ={0,1}上正则表达式为0*10*10*10*,
(1)该正则表达式所定义的语言是什么
(2)画出接收该语言的NFA
(3)把该NFA转换成等