by20120307第二章-词法分析_第1页
by20120307第二章-词法分析_第2页
by20120307第二章-词法分析_第3页
by20120307第二章-词法分析_第4页
by20120307第二章-词法分析_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章词法分析2.1词法分析器设计方法2.2正规表达式与有限自动机简介2.3正规表达式到有限自动机的构造第二章词法分析词法分析任务:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号,把字符串形式的源程序改造成为单词符号串形式的中间程序。执行词法分析的程序称为词法分析器。词法分析的功能输入源程序输出单词符号串单词的描述工具---正规表达式

单词的识别系统---有穷自动机单词的描述工具---正规表达式

单词的识别系统---有穷自动机1.作为语法分析器的子程序:词法分析采用的工作方式2.词法分析进行单独一遍扫描:3.与语法分析器并行工作:2.1词法分析器设计方法2.1.1单词符号的分类与输出形式1、单词符号的分类单词符号是程序设计语言的根本语法单位,具有特定的语法意义。单词符号通常可分为五种:1.关键字〔保存字〕:程序设计中有固定意义,例如:if、else、while等。2.标识符:用户为某实体起的名字,如变量名、常量名、函数名等。3.字面量:以字面形式表示的常量,例如10、true、"China"等。

特殊符号:程序设计过程中有特殊用途的符号〔细分为:运算符、分隔符〕。4.运算符:例如=、+、-、*、>、<等。5.界符(分隔符):在语言中作为语法上的分界符号使用,例如“{}”、“,”、“;”等。2、词法分析程序输出单词的形式模式〔pattern〕:产生和识别单词的规那么。它描述了一个单词符号的单词可能具有的形式。单词符号〔又称“记号token”〕通常表示成二元式:〔单词种别,单词自身的值〕〔1〕单词种别〔单词类型〕。表示单词种类,是语法分析所需要的信息。又称“记号名字〔token-name〕”。〔2〕单词自身的值。为编译中其它阶段提供所需要的信息。简称“属性值〔attribute-value〕”。单词〔lexeme〕:源程序中的一个字符序列,它和某个记号的模式匹配,并被词法分析器识别为该记号的一个实例。单词种别助记符种别编码单词自身的值(内码值)模式(非正式描述)单词(实例)if2

—字符i,fifid6指向id符号表入口的指针字母(含“_”)开头的字母/数字串Pi,D2,scorenum7指向num常数表入口的指针任何数字常量0,3.14159,6.2e12relop11LE<或>或<=…<=单词符号C语言子集的单词符号、模式、单词2.1.2状态转换图词法分析中,可以使用状态转换图来识别单词。状态转换图是有限的有向图,结点表示状态,结点之间用有向边连接,有向边上标记字符。例:

标识符关系运算符状态转换图的程序实现不含回路的分支状态:使用switch()语句来实现S=getchar();switch(s){case‘a’:case‘b’:……case‘z’:……;/*实现状态j功能的语句*/case‘0’:case‘1’:……case‘9’:……;/*实现状态k功能的语句*/}ikj数字字母状态转换图的程序实现含回路的状态:可以对应while语句来实现getchar();while(letter()||digit())getchar();……;/*实现状态j功能的语句*/}ij字母/数字返回目录其它2.2正规表达式与有限自动机引:字符串与语言一、字母表和串1.字母表:非空有穷符号的集合。常用Σ表示2.字符串:字母表Σ上的符号组成的有穷序列。二、相关字符串的根本概念和集合的根本运算:表示、术语意义ε空串,即长度为0的字符串|S|字符串S的长度,S中字符个数S1S2字符串S1和S2的连接SnS自身连接n次S的前缀X去掉S尾部若干字符形成的串S的后缀X去掉S头部若干字符形成的串S的子串X去掉S前缀或/和后缀字符形成的串S的真前缀、真后缀、真子串XX是S的一个前缀、后缀、或子串,并且具有性质:1.X≠S;2.|X|>0S的子序列XS中去掉0或若干个不一定连续的字符后形成的字符串表示术语意义Φ空集合,元素个数为0{ε}由空串组成的集合,元素个数为1X=L∪M并:X={s|s∈Lors∈M}X=L∩M交:X={s|s∈Lands∈M}X=LM连接:X={st|s∈Landt∈M}X=L+X是集合L的正闭包X=L1∪L2∪L3∪

…\X=L+=LL*(闭包:任意有限次的自重复连接)X=L*X是集合L的星闭包X=L0∪L1∪L2∪…\X=L*=L0∪L+(L0={ε})三、语言:语言L是有限字母表Σ上有限长度字符串的集合。注意:1.两个有限2.语言集合中的元素称为句子或字。例:L={A,B,C,…,Z,a,b,c,…,z}D={0,1,2,…,9}那么1.L∪D2.LD3.L64.L*5.L(L∪D)*6.D+字母和数字组成的集合{0,1,…,z}一个字母后跟一数字组成的集合{a1,…,z9}所有由6个字母组成的串的集合所有字母串的集合,包括ε所有以字母开头的字母数字串的集合不含空串的数字串的集合正规式与正规集一、正规式与正规集正规式:令Σ是有限字母表,那么其上的正规式及其表示的正规集的递归定义如下:①ε是正规式,它表示集合L(ε)={ε};②假设任意a∈Σ,那么a是正规式,它表示集合L(a)={a};③假设正规式r和s分别表示集合L(r)和L(s),那么(a)r|s是正规式,表示集合L(r)∪L(s);(b)rs是正规式,表示集合L(r)L(s);(c)r*是正规式,表示集合(L(r))*;(d)(r)是正规式,表示的集合仍然是L(r)。可用正规式描述的语言称为正规语言或正规集。例:以下正规式分别表示什么正规集?a,b,ca|ba(a|b)*{a},{b},{c}{a}∪{b}={a,b}{a,aa,ab,aaa,aab,aba,abb,…}例:L={A,B,C,…,Z,a,b,c,…,z}D={0,1,2,…,9}设l=A|B|…|Z|a|b|…|zd=0|1|2|…|9那么1.L∪D2.LD3.Ln4.L*5.L(L∪D)*

正规式

l|d正规式

ld正规式ln正规式

l*正规式

l(l|d)*二、正规式的相关说明1.三种运算:闭包、连接、或。左结合;优先级2.正规式的等价:假设正规式P和Q表示了同一个正规集,那么称P和Q是等价的,记为P=Q。例:令L(X)={a,b},L(Y)={c,d},求L(X|Y)和L(Y|X)。表2.6正规式的代数性质(定律)r∣r=r有限自动机不确定的有限自动机〔NondeterministicFiniteAutomata,NFA〕一、定义:NFA是一个五元组(5-tuple)M=(S,∑,f,s0,F)其中:①S是有限个状态(state)的集合;②∑是有限个输入字符(包括ε)的集合;③f是一个状态转移函数,f(si,ch)=sj表示当前状态si下假设遇到输入字符ch,那么转移到后继状态sj;④s0是一个非空初态集(也称开始状态);⑤F是终态集(也称接受状态集),它是S的子集,包含了所有的终态。2.状态转换矩阵矩阵形式表示:二维表、M[si,ch]=sj例:正规式(a|b)*abb的NFA定义如下:S={0,1,2,3},Σ={a,b},s0=0,F={3}

f={f(0,a)=0,f(0,a)=1,f(0,b)=0,f(1,b)=2,f(2,b)=3}状态〔节点〕转换关系〔边〕初始状态终止状态二、自动机的表示:1.状态转换图图1识别(a|b)*abb的NFA(a)转换图表示的NFA;(b)转换矩阵表示的NFA

状态转换图识别出每一个字符串实质上都是从初态开始到某个终态的路径上的标记。如:识别abb和abab例:识别记号id、relation、num的状态转换图标识符关系运算符0213456dd.ddEE+,-ddd数字三、NFA的特点:不确定性:反映在定义中就是f函数的一对多。不确定性给识别工作带来巨大问题

确定的有限自动机(DeterministicfiniteAutomata,DFA)一、定义:DFA是NFA的一个特例,其中:①没有状态具有ε状态转移(ε-transition),即状态转换图中没有标记ε的边;②对每一个状态s和每一个字符ch,最多有一个后继状态。例:正规式(a|b)*abb的DFA,其转换图和转换矩阵分别表示如以下图所示。然后,用它识别输入序列abb和abab。图2识别(a|b)*abb的DFA转换图表示的DFA;(b)转换矩阵表示的DFA给出DFA识别abb和abab的过程二、DFA的特点:确定性:DFA识别输入序列时路径唯一,无需回溯,简化了记号的识别过程。三、算法---模拟DFA输入DFAD和输入字符串x。x由文件结束符eof终止,D的初态为s0,终态集为F,转移函数f。输出假设D接受x,答复“yes”,否那么答复“no”。方法用下述过程识别x:S=S0;a=nextchar();while〔a!=eof〕{S=f(S,a);a=nextchar();}if(SisinF)return“yes”;elsereturn“no”;例:数字12.34有限自动机的等价1.NFA和DFA统称有限自动机(FA),状态有限。2.等价:假设有限自动机M和M’识别同一个正规集,那么称M和M’是等价的,记为M=M’。前面图1和图2所示的自动机是等价的。3.对于任何NFA均有对应的DFA。返回目录2.3正规式到有限自动机的构造构造词法分析器的一般方法与步骤:①用正规式对模式进行描述;②为每个正规式构造一个NFA,它识别正规式所表示的正规集;③将构造出的NFA转换成等价的DFA,这一过程也被称为确定化;④优化DFA,使其状态数最少,这一过程也被称为最小化;⑤从优化后的DFA构造词法分析器。由正规表达式构造等价的NFAM由正规表达式构造等价的NFAM的方法:将正规表达式R表示成左图的形式(拓广转换图)对正规表达式采用如右图所示的三条转换规那么来构造。例:b*(d|ad)(b|ab)*-------教材:例2.6练习:1.〔a|b〕*2.((ε|a)b*)*①R②NFAM确实定化NFA确实定化是指对给定的NFA都能相应地构造出一个与之等价的DFA,使它们能够识别相同的语言。ε_闭包定义FAM的一个状态子集I的ε_闭包,即ε-closure(I),那么:(1)假设si∈I,那么si∈ε_closure(I);(2)假设si∈I,那么对从si出发经过ε通路所能到达的任何状态sj,都有sj∈ε_closure(I)。其次,对FAM的一个状态子集I,假设a是Σ中的一个字符,定义Ia=ε-closure(J),其中,J是所有那些可以从I中某一状态出发经过有向边a而能到达的状态集。子集法实现NFA确实定化构造一张转换表:其第一列为状态子集I,对不同的a(a∈Σ)在表中单设一列Ia。表的第一行第一列:其状态子集I为ε_closure(s0)其中s0为初始状态。根据第一列中的I,为每一个a求其Ia,并记入对应的Ia列中,如果此Ia不同于第一列中已存在的所有状态子集I,那么将其顺序列入空行中的第一列。重复上一步骤,直至对每个I及a均已求得Ia,并且无新的状态子集Ia产生,此过程可在有限步后终止。重新命名第一列每一个状态子集,那么转换表便成为新的状态转换矩阵。010142537896εεεεεεεεababb例:给出如下NFA应用“子集法”确定化的过程NFAACBDEaaaabbbbbaDFADFAM的化简对NFA确定化后所得到的DFA可能含有多余的状态,因此还应对其进行化简,是指寻找一个状态数比M少的DFAM’,使得L(M)=L(M’)。化简了的DFAM’满足下述条件:没有多余状态;在其状态集中,没有两个相互等价的状态存在。一个DFAM的状态最小化过程是将M的状态集分割成一些不相交的子集,使得任何不同的两个子集其状态是可区分的,而同一子集中的任何两个状态都是等价〔即:不可分〕的。DFA化简-相关概念定义对于给定的DFAM,假设存在状态s1、s2∈S且s1≠s2,如果从s1出发能识别字符串ω而停于终态,从s2出发也同样能识别字符串ω而停于终态;反之,假设从s2出发能识别ω’而停于终态,那么从s1出发也能识别ω’而停于终态,那么称s1和s2是等价的。定义对于任何两个状态s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论