讲稿第4章 词法分析.docx
- 文档编号:28403830
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:27
- 大小:750.87KB
讲稿第4章 词法分析.docx
《讲稿第4章 词法分析.docx》由会员分享,可在线阅读,更多相关《讲稿第4章 词法分析.docx(27页珍藏版)》请在冰豆网上搜索。
讲稿第4章词法分析
0第4章词法分析(8学时,5分钟)
词法分析是编译的第一个阶段,它的主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析。
执行词法分析的程序称为词法分析程序或扫描程序。
本章我们将讨论词法分析程序的设计原则、单词的扫描技术、识别机制及词法分析程序的自动构造原理。
教学内容:
4.1词法分析程序
4.2单词的描述工具
4.3有限自动机
4.4正规式和有限自动机的等价性
4.5正规文法和有限自动机的等价性
本章重点:
单词的描述工具
单词的识别系统
设计和实现词法分析程序
首先需要描述和刻画程序设计语言中的原子单位——单词,其次需要识别单词和执行某些相关的动作。
描述程序设计语言的词法的机制是正规表达式,识别机制是有穷状态自动机。
4.1词法分析程序(25分钟)
编译程序首先在单词级别上来分析和翻译源程序。
词法分析的任务是:
从左至右逐个字符地对源程序进行扫描,产生一个个单词符号,即把作为字符串的源程序改造成为单词符号串的中间程序。
因此,词法分析是编译的基础。
执行词法分析的程序称为词法分析器(通常又称为扫描器,scanner)。
一、词法分析的任务
(1)分析和识别单词及属性,包括识别语言的关键字、标识符、常数、运算符等;
(2)跳过各种分隔符,如空格,回车,制表符等;
(3)删除注释;
(4)进行词法检查,报告所发现的错误;
(5)建立符号表。
二、词法分析程序的输入和输出形式
输入——字符串形式的源程序。
输出——单词符号串。
程序语言的单词符号一般分为五种:
关键字、运算符、界符、标识符、常数
词法分析器输出的单词符号常常表示为二元式:
(单词种别,单词符号的属性值)
单词种别是对单词符号的一种分类,通常用整数编码。
一个语言的单词符号如何分种,分成几种,怎样编码是一个技术性问题。
它取决于处理上的方便。
单词符号属性信息记录单词符号的特征或特性。
例如,对于某个标识符,常将存放它有关信息的符号表项的指针作为其属性值;对于某个常数,则将存放该常数二进制表项的指针作为其属性值。
表3.1intx=10,y=20,sum;词法分析的结果
三、词法分析程序的实现方式
1.词法分析单独作为一遍
优点:
结构清晰、各遍功能单一
缺点:
效率低
2.词法分析程序作为单独的子程序
这样一来,就无须在外存中保留整个源程序的内码形式,而是每当语法分析器需要单词符号时就调用这个子程序。
每一次调用,词法分析器就从源程序字符串中识别出一个单词符号,把它交给语法分析器。
四、将词法分析工作分离的原因
1、压缩编译时扫描字符的时间,提高效率:
编译时大量时间花费在字符的扫描上;
2、词法规则描述简单,便于建立扫描器的自动方法,便于独立研究;
3、便于处理同一语言的几种不同表示形式;
4.2单词的描述工具(40分钟)
程序设计语言中的单词是基本语法成分,单词符号的语法可以用有效的工具加以描述,并且基于这类描述工具,实现词法分析程序的自动构造。
一、正规式
我们知道,任何高级程序设计语言都有自己的字母表,但并非字母表上的任何字符串都能称为一个程序,我们感兴趣的是能称为程序的那些串,它们的集合称为正规集。
正规式也称正则表达式,正规表达式是说明单词的模式的一种重要的表示法,是定义正规集的数学工具。
我们用以描述单词符号。
这同样是一个无穷语言的有穷描述的问题。
下面是正规式和它所表示的正规集的递归定义。
定义(正规式和它所表示的正规集):
设字母表为,辅助字母表’={Φ,,,,,,}。
1.和Φ都是上的正规式,它们所表示的正规集分别为{}和Φ;
2.任何a∈,a是上的一个正规式,它所表示的正规集为{a};
3.假定e1和e2都是上的正规式,它们所表示的正规集分别为L(e1)和L(e2),那么,(e1),e1e2,e1e2,e1也都是正规式,它们所表示的正规集分别为L(e1),L(e1)∪L(e2),L(e1)L(e2)和(L(e1))。
4.仅由有限次使用上述三步骤而定义的表达式才是上的正规式,仅由这些正规式所表示的集合才是上的正规集。
这个定义本身是构造型的,今后我们应该习惯这种构造型定义及证明方式。
其中的“”读为“或”(也有使用“+”代替“”的);
“”读为“连接”;
“”读为“闭包”(即,任意有限次的自重复连接)。
在不致混淆时,括号可省去,但规定算符的优先顺序为“”、“”、“”。
连接符“”一般可省略不写。
“”、“”和“”都是左结合的。
例如令={a,b},上的正规式和相应的正规集的例子有:
正规式正规集
a{a}
ab{a,b}
ab{ab}
(ab)(ab){aa,ab,ba,bb}
a{,a,a,……任意个a的串}
(ab){,a,b,aa,ab……所有a,b组成的串}
(ab)(aabb)(ab){上所有含有两个相继的a或两个相继的b组成的串}
讨论下面两个例子
例4.1令={l,d},则上的正规式r=l(ld)定义的正规集为:
{l,ll,ld,ldd,……},其中l代表字母,d代表数字,正规式即是字母(字母|数字),它表示的正规集中的每个元素的模式是“字母打头的字母数字串”,就是Pascal和多数程序设计语言允许的的标识符的词法规则.
例4.2={d,,e,+,-},
则上的正规式d(.dd)(e(+-)dd)表示的是无符号数的集合,其中d为09的数字。
比如2、21.59、3.6e2、471.88e-1等都是该正规集中的元素。
程序设计语言的单词都能用正规式来定义。
二、正规式的等价
若两个正规式e1和e2所表示的正规集相同,则说e1和e2等价,写作e1=e2。
例如:
e1=(ab),e2=ba
又如:
e1=b(ab),e2=(ba)b
e1=(ab),e2=(ab)
三、正规式服从的代数规律
设r、s、t为正规式,正规式服从的代数规律有:
1.rs=sr“或”服从交换律
2.r(st)=(rs)t“或”的可结合律
3.(rs)t=r(st)“连接”的可结合律
4.r(st)=rsrt分配律
(st)r=srtr
5.r=r,r=r是“连接”的恒等元素
零一律
6.rr=r“或”的抽取律
4.3有限自动机(160分钟)
有限自动机(也称有穷自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合,引入有限自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。
有限自动机分为两类:
确定的有限自动机(DeterministicFiniteAutomata)
不确定的有限自动机(NondeterministicFiniteAutomata)
关于有限自动机我们将讨论如下题目:
确定的有限自动机DFA
不确定的有限自动机NFA
NFA的确定化
DFA的最小化
4.3.1确定的有限自动机DFA(45分钟)
状态或结束一、DFA定义
一个确定的有限自动机(DFA)M是一个五元组:
M=(K,,f,S,Z)其中
1.K是一个有穷集,它的每个元素称为一个状态;
2.是一个有穷字母表,它的每个元素称为一个输入符号,所以也称为输入符号表;
3.f是转换函数,是在K×K上的映射,即,如f(ki,a)=kj(ki∈K,kj∈K)就意味着,当前状态为ki,输入符为a时,将转换为下一个状态kj,我们把kj称作ki的一个后继状态;
4.S∈K是唯一的一个初态;
5.ZK是一个终态集,终态也称可接受状态。
例4.3:
DFAM=({S,U,V,Q},{a,b},f,S,{Q})其中f定义为:
f(S,a)=Uf(V,a)=U
f(S,b)=Vf(V,b)=Q
f(U,a)=Qf(Q,a)=Q
f(U,b)=Vf(Q,b)=Q
二、DFA的表示
一个DFA可以表示成一个状态图(或称状态转换图)。
假定DFAM含有m个状态,n个输入字符,那么这个状态图含有m个结点,每个结点最多有n个弧射出,整个图含有唯一一个初态结点和若干个终态结点,初态结点冠以双箭头“”或标以“-”,终态结点用双圈表示或标以“+”,若f(ki,a)=kj,则从状态结点ki到状态结点kj画标记为a的弧。
例4.3的状态图表示:
一个DFA还可以用一个矩阵表示,该矩阵的行表示状态,列表示输入字符,矩阵元素表示相应状态行和输入字符列下的新状态,即k行a列为f(k,a)的值。
用双箭头“”标明初态;否则第一行即是初态,相应终态行在表的右端标以1,非终态标以0。
该矩阵称为状态转换矩阵。
例4.3的矩阵表示:
以后我们用*表示终态。
三、可识别符号串
为了说明DFA如何作为一种识别机制,我们还要理解下面的定义。
对于*中的任何一个字符串t,若存在一条从初态结点到某一终态结点的通路,且这条通路上所有弧的标记符连接成的字符串等于t,则称t可为DFAM所识别(读出或接受)。
若M的初态结点同时又是终态结点,则可以为M所识别。
换一种叙述方式:
若t∈*,f(S,t)=P,其中S为M的开始状态,P∈Z,Z为终态集,则称t为DFAM所接受(识别)。
DFAM所能接受的符号串的全体记为L(M),对于任何两个有限自动机M和M′,如果L(M)=L(M′),则称M与M′是等价的。
结论:
DFA的确定性表现在转换函数f:
K×K是一个单值函数,也就是说,对任何状态k∈K和输入符号a∈,f(k,a)唯一地确定了下一个状态。
从状态转换图来看,任何状态发出的弧具有不同的标识。
例:
DFAM=({0,1,2,3},{a,b},f,0,{3})
其中:
f(0,a)=1;f(0,b)=2
f(1,a)=3;f(1,b)=2
f(2,a)=1;f(2,b)=3
f(3,a)=3;f(3,b)=3
问:
有几个状态,几个输入字符?
并画出其转换图。
解:
有0,1,2,3共四个状态。
输入字符为a,b两个。
其状态转换图如下
对于符号串abaab,可被识别。
对于符号串abab,不能被识别。
4.3.2不确定的有限自动机NFA(40分钟)
一、NFA的定义
一个不确定的有限自动机(NFA)M是一个五元组:
M=(K,,f,S,Z)其中
1.K是一个有穷集,它的每个元素称为一个状态;
2.是一个有穷字母表,它的每个元素称为一个输入符号;
3.f是一个从K×*K的子集的映射,即K**2k,其中2K表示K的幂集,即K中所有子集组成的集合。
如果f(W,a)={P1,P2,…,Pn},则表示在当前状态W下,输入字符a时,将转换到状态P1,P2,…,Pn;
4.SK是一个非空初态集;
5.ZK是一个终态集。
二、NFA的表示
显然,NFA也可以表示成一张状态转换图。
假定NFA含有m个状态、n个输入字符,那么,这张图含有m个状态结点,每个结点可以射出若干条箭弧和别的结点相连接,每条箭弧用*上的一个字(不一定要不同的字而且可以是空字)作标记(称为输入字),整张图至少含有一个初态和若干个(可以是0个)终态结点。
某些结点既可以是初态也可以是终态结点。
例如:
NFAM=({S,P,Z},{0,1},f,{S,P},{Z}),其中:
f(S,0)={P}
f(Z,0)={P}
f(P,1)={Z}
f(Z,1)={P}
f(S,1)={S,Z}
它的状态图是:
矩阵表示是:
三、可识别符号串
对于∑*中的任何一个串t,若存在一条从某一初态结到某一终态结的道路,且这条道路上所有弧的标记字依序连接成的串(不理睬那些标记为ε的弧)等于t,则称t可为NFAM所识别(读出或接受)。
若M的某些结既是初态结又是终态结,或者存在一条从某个初态结到某个终态结的ε道路,那么空字ε可为M所接受。
例如:
可识别的串不能识别
00000
11101100
1010001
110000001
NFAM所能接受的符号串的全体记为L(M)。
结论:
上一个符号串集V是正规的,当且仅当存在一个上的不确定的有限自动机M,使得V=L(M)。
例如符号串(0|1)*(000|111)(0|1)*,相应的NFA如上图所示。
DFA是NFA的特例。
对每个NFAN一定存在一个DFA M,使得L(M)=L(N)。
对每个NFAN存在着与之等价的DFAM。
4.3.3NFA的确定化(45分钟)
定理:
设L为一个由NFA接受的集合,则存在一个接受L的DFA。
子集法:
NFA转换为等价的DFA的算法。
NFA不确定的原因主要在于含有ε弧和从某结点经由相同标识的弧而到达不同的结点——结点集。
这两个问题解决了,NFA也就确定了。
从NFA的矩阵表示中可以看出,表项通常是一状态的集合,而在DFA的矩阵表示中,表项是一个状态。
NFA到相应的DFA的构造的基本思路是:
DFA的每一个状态对应NFA的一组状态。
DFA使用它的状态去记录在NFA读入一个输入符号后可能达到的所有状态。
转换需要解决的问题是:
1.ε合并
如果有S1εS2,则把S2合并到S1。
2.状态合并
为了使得NFA确定化,我们首先给出两个定义:
定义1状态集合I的-闭包,表示为-closure(I)
①若q∈I,则q∈-closure(I);
②若q∈I,则从q出发经过任意条弧而能到达的任何状态q'都属于-closure(I)。
课堂练习答案:
-closure(I)={1,2,3,6}
定义2Ia子集
I是状态集,由I中的状态出发,经过一条a弧可能到达的状态的集合称为move(I,a),则
Ia=ε_closure(move(I,a))
课堂练习答案:
I={1,2,3}
Ia=-closure(I)={move(I,a)}
=-closure(f(1,a)∪f(2,a)∪f(3,a))
=-closure({2,4,5,6})
={2,4,5,6}
根据定义1,2,可以将上述的M’确定化(即可构造出状态转换矩阵)。
NFA转换为DFA的思想:
将从状态S出发经过任意条弧所能到达的状态作为DFA的初态S';
从S'出发,把遇到输入符号a所转移到的后继状态集作为DFA的新状态;
如此重复,直到不再有新的状态出现为止。
例题:
课堂练习:
令I={1},设S'=ε-closure(I),求S'、S'a
答案:
S'={1,4}S'a={2,3}
若要将上图的NFA转换为DFA,步骤如下:
(1)构造一张表,它共有|Σ|+1列(Σ={a,b,c});
(2)第一行第一列为-closure({S});
(3)求Ia、Ib、Ic并检查,未在第一列出现过者,填入下行首列;
(4)重复步骤(3);
(5)将状态子集重新命名。
根据新编号的矩阵转换为状态图:
注意:
-closure({S})为DFAM的初态
包含原终止状态4的状态子集为DFAM的终态。
由上述构造过程不难看出:
L(M)=L(M′),于是达到了确定化的目的。
课堂练习:
将下列NFA转换为DFA
等价的DFA
由以上内容,我们知道任何一正规集上,我们都可以构造一个NFAM接受正规集V,而对任何一个NFAM我们又都能构造一个接收相同集合的DFAM´,现在我们可能会想到DFA是否可以化简呢,或者说是否可以找一个状态最少的DFA接受相同的正规集呢?
下面我们就来讨论这个问题。
4.3.4DFA的最小化(30分钟)
我们说一个有限自动机是化简了的,即是说,它没有多余状态并且它的状态中没有两个是互相等价的。
一个有限自动机可以通过消除多余状态和合并等价状态而转换成一个最小的与之等价的有限自动机。
对于任一个DFA,存在一个唯一的状态最少的等价的DFA。
所谓有限自动机的多余状态,是指这样的状态:
从自动机的开始状态出发,任何输入串也不能到达的那个状态;或者从这个状态没有通路到达终态。
DFA的最小化就是寻求最小状态DFA。
最小状态DFA的含义:
没有多余状态;
没有两个状态是互相等价。
两个状态s和t等价,需满足:
(或可区别:
不满足)
一致性条件——同是终态或同是非终态;
蔓延性条件——从s出发读入某个aa和从t出发读入某个a到达的状态等价。
例如下图中:
C和F是等价的。
因为C和F同是终态,C和F读入a都到达C,读入b都到达E,所以C和F等价。
DFA最小化算法的核心——分割法。
步骤如下:
(1)将所有状态分成两个子集:
终态集和非终态集;
(2)把等价的状态构成一个子集,若不等价继续划分;
(3)结束后,重新标号或从每个子集中选一个状态做代表。
DFA最小化的例子,见上图:
M={S,A,B}∪{C,D,E,F}
∵{S,A,B}a={A,C}不包含于第1次划分出的任意集合
∴{S,A,B}不等价,继续得到第2次划分为:
{S,B}∪{A}
∵{S,B}b={B,D}不包含于第2次划分出的任意集合
∴{S,B}不等价,继续得到第3次划分为:
{S}∪{A}∪{B}
∵{C,D,E,F}a={C,F}
{C,D,E,F}b={D,E}
∴{C,D,E,F}等价
故最后结果为:
M={S}∪{A}∪{B}{C,D,E,F}
因{C,D,E,F}等价,故从{C,D,E,F}中选C作为代表,出现D,E,F的地方一律用C代替,如下:
最小化的DFA为:
化简后的有限自动机具有较少的状态,在计算机上实现起来更加简洁。
4.4正规式和有限自动机的等价性(40分钟)
(1)对于字母表Σ上的NFAM,可以构造一个Σ上的正规式r,使得L(r)=L(M);
(2)对于字母表Σ上的每个正规式r,可以构造一个Σ上的NFAM,使得L(M)=L(r)。
一、由NFAM构造正规式r
(1)在M上加两个结点S、Z,从S结点用ε弧到M的所有初态,从M的所有终态用ε到Z结成与M等价的M’,M’只有一个初态S和一个终态Z。
(2)逐步消去M’中的所有结点,直至剩下S和Z结点,在消结过程中,逐步用正规式来标记弧,规则如下:
对于NFA的情况具有一般性,若用DFAM则更简单。
二、由正规式r构造NFAM
(1)对NFAM构造一个广义的状态图,其中只有一个初态S和终态Z,连接S和Z的有向弧标记为正规式。
(2)对正规式依次进行分解,分解的过程是一个不断加入结点和弧的过程,直到转换图上的所有弧标记上都是字母表Σ上的元素或为止。
若s,t为Σ上的正规式
(a)对于正规式R=st
(b)对于正规式R=s|t
(c)对于正规式R=rs*t
例:
为R=(a|b)*abb构造NFA,使得L(N)=L(R)
4.5正规文法和有限自动机的等价性(40分钟)
定理:
由任意正规文法G定义的语言必然能被一个NFAM所接受。
即L(G)=L(M)。
一、由正规文法G构造NFAM
(1)文法的终结符号集为NFA的字母表;
(2)文法的非终结符号集为NFA的状态集;
(3)文法的开始符号作为NFA的初态;
(4)增加一个新状态Z,作为NFA的终态;
(5)对文法中形如AtB的产生式,其中t为终结符或,A和B为非终结符,构造NFA的一个转换函数f(A,t)=B;
(6)对文法中形如At的产生式,构造NFA的一个转换函数f(A,t)=Z。
例:
构造同正规文法G等价的NFA。
G[S]:
SaB
BaB|bS|a
解:
设NFAM=(K,∑,f,S,Z)
K={S,B,Z}∑={a,b}S=SZ={Z}
转换函数f:
对于产生式SaB,有f(S,a)={B}
对于产生式BaB,有f(B,a)={B}
对于产生式BbS,有f(B,b)={S}
对于产生式Ba,有f(B,a)={Z}
二、由NFAM构造正规文法G
(1)NFA的字母表为文法的终结符号集;
(2)NFA的状态集为文法的非终结符号集;
(3)NFA的初态对应于文法的开始符号(如果M有多个初态,应先拓广NFA,引入新初态X);;
(4)NFA的转换函数f(A,t)=B,写成一个产生式AtB;
(5)对NFA的终态Z,增加一个产生式Z。
例:
构造同NFAM等价的正规文法G。
解:
设正规文法G=(VN,VT,P,S)
VN={A,B,C,D}VT={a,b}S=A
产生式集合P
对于f(A,a)={B},有产生式AaB
对于f(A,b)={D},有产生式AbD
对于f(B,b)={C},有产生式BbC
对于f(C,a)={A},有产生式CaA
对于f(C,b)={D},有产生式CbD
对于终态C,增加产生式Cε
对于f(D,a)={B},有产生式DaB
对于f(D,b)={D},有产生式DbD
对于终态D,增加产生式Dε
G[A]:
AaB|bD
BbC
CaA|bD|ε
DaB|bD|ε
三、有限自动机与正规式、正规文法的关系
结论:
有限自动机、正规式、正规文法都定义了同一种语言——正规语言。
它们之间的转换关系如图示:
第4章小结(15分钟)
词法分析程序是编译第一阶段的工作,它读入字符流的源程序,按照词法规则识别单词,交由语法分析程序接下去。
本章讲述了词法分析程序设计原则,并介绍了分别作为正规集的描述机制和识别机制的正规式和有限自动机。
本章考察的知识点:
第4章作业(5分钟)
P737,9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 讲稿第4章 词法分析 讲稿 词法 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)