第3章-词法分析-编译原理-陈火旺.ppt
《第3章-词法分析-编译原理-陈火旺.ppt》由会员分享,可在线阅读,更多相关《第3章-词法分析-编译原理-陈火旺.ppt(107页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1v内容:内容:状态转换图、正规式和有限自动机、词法分析器的自动生成状态转换图、正规式和有限自动机、词法分析器的自动生成v掌握掌握:正规式、状态转换图,正规式、状态转换图,DFN的概念、的概念、NFA的概念,将的概念,将NFA转转 换为换为DFA、DFA的化简、正规式与有限自动机间的转换。的化简、正规式与有限自动机间的转换。v理解理解:正规文法与有穷自动机间的转换正规文法与有穷自动机间的转换 词法分析器的自动产生工具词法分析器的自动产生工具LEX 第第3章章 词法分析词法分析教学要求教学要求2本章在编译程序中的地位本章在编译程序中的地位表表格格管管理理词法分析器词法分析器语法分析器语法分析器语
2、义分析与中间代码产生语义分析与中间代码产生优化器优化器目标代码生成器目标代码生成器源程序源程序单词符号单词符号语法单位语法单位中间代码中间代码中间代码中间代码目标代码目标代码出出错错处处理理3v执行词法分析的程序称为执行词法分析的程序称为又称为又称为词法分析器词法分析器或或扫描器扫描器.v词法分析的词法分析的任务任务:从左至右逐个地扫描源程:从左至右逐个地扫描源程序的字符串序的字符串,按照按照词法规则词法规则识别出一个个正识别出一个个正确的单词,并转换为相应的确的单词,并转换为相应的二元式二元式形式,交形式,交给语法分析使用。给语法分析使用。v把作为字符串的源程序改造成单词符号串的把作为字符串
3、的源程序改造成单词符号串的词法分析是编译的基础。词法分析是编译的基础。3.1 设计设计词法分析器词法分析器时应考虑的几个问题时应考虑的几个问题43.1.1 词法分析阶段的必要性词法分析阶段的必要性 v词法分析的工作纳入整个语法分析中一揽子地进行,原则上是词法分析的工作纳入整个语法分析中一揽子地进行,原则上是可行的。可行的。v在设计一个编译程序时,通常是把对源程序的结构分析分为词在设计一个编译程序时,通常是把对源程序的结构分析分为词法分析和语法分析两个相对独立的阶段来完成。法分析和语法分析两个相对独立的阶段来完成。第一,描述单词的结构比描述源程序的其它语法结构要简单第一,描述单词的结构比描述源程
4、序的其它语法结构要简单得多,仅使用得多,仅使用3 3型文法也就基本够用了。型文法也就基本够用了。第二,由于把词法分析和语法分析分开,可使编译程序各部第二,由于把词法分析和语法分析分开,可使编译程序各部分的功能更为单一,整个编译程序的结构也更加清晰,从而分的功能更为单一,整个编译程序的结构也更加清晰,从而有利于编译程序的编写和调整。有利于编译程序的编写和调整。v上述词法分析和语法分析两个阶段的划分,仅仅是对整个编译上述词法分析和语法分析两个阶段的划分,仅仅是对整个编译程序的逻辑功能而言,而不一定指的是编译程序的执行流程。程序的逻辑功能而言,而不一定指的是编译程序的执行流程。53.1.2 词法分析
5、器的输出形式词法分析器的输出形式v词法分析器输出的单词常常表示为词法分析器输出的单词常常表示为二元式二元式形式形式 (单词种别单词种别,单词符号的属性值单词符号的属性值)单词种别提供给语法分析程序使用;单词符号的属性值提供给语义分析程序使用。具体的分类设计方法以方便语法分析程序使用为原则。63.1.2 词法分析器的输出形式词法分析器的输出形式v程序语言的单词符号一般分为五种:程序语言的单词符号一般分为五种:关键字关键字(保留字或基本字保留字或基本字):如:如 if,then,else,while,doif,then,else,while,do等等 标识符标识符:用来表示各种名字,如:用来表示各
6、种名字,如 x1x1常量常量:如:如 256256,3.143.14,true,true,abcabc 运算符运算符:如:如 、*、/等等等等分界符分界符:如:如 逗号,分号,冒号等逗号,分号,冒号等73.1.2 词法分析器的输出形式词法分析器的输出形式v单词种别单词种别:一个语言的单词符号如何分类、分为几类、如何一个语言的单词符号如何分类、分为几类、如何编码主要取决于处理上的方便。通常,每种单词对编码主要取决于处理上的方便。通常,每种单词对应一个整数码。应一个整数码。注意:保留字、运算符和界符的个数确定,注意:保留字、运算符和界符的个数确定,标识符和常数的个数不确定。标识符和常数的个数不确定
7、。保留字:保留字:可全体视为一种,也可一字一种;可全体视为一种,也可一字一种;标识符:标识符:统归为一种;统归为一种;常数:常数:统归为一种统归为一种,或按整、实、布尔等再分;或按整、实、布尔等再分;运算符和界符:运算符和界符:一符一种,或统归为一种。一符一种,或统归为一种。83.1.2 词法分析器的输出形式词法分析器的输出形式v单词符号的属性值单词符号的属性值 单词符号的属性是指单词符号的特征值。如果一个种别只含有一个单词符号,那么对于这个单词符号,种别编码就完全代表它自身了,因而不需要属性值。若一个种别含有多个单词符号,那么,对于它的每个单词符号,除了给出种别编码之外,还应给出有关单词符号
8、的属性值。93.1.2 词法分析器的输出形式词法分析器的输出形式v单词符号的属性值单词符号的属性值标识符和常数标识符和常数 标识符的标识符的内部码内部码(如如ASCII码等等码等等)和和常数本身的值常数本身的值(二进制,逻辑值等二进制,逻辑值等)来表示。来表示。标识符的标识符的符号表入口地址符号表入口地址作为其单词符号的属性值作为其单词符号的属性值,常量在其常量在其常量表中的入口地址常量表中的入口地址作为其单词符号的属性作为其单词符号的属性值。值。每个基本字占一个单词种别,单词符号的属性值缺省每个基本字占一个单词种别,单词符号的属性值缺省。对于界符,运算符通常一个符号一个种别,单词符号的对于界
9、符,运算符通常一个符号一个种别,单词符号的属性值缺省属性值缺省例例:参见参见P42.P42.表表3.1 3.1 单词符号及种别编码单词符号及种别编码103.1.3 词法分析器作为独立子程序词法分析器作为独立子程序v词法分析可采用如下两种处理结构词法分析可采用如下两种处理结构:把词法分析程序作为主程序。将词法分析作为把词法分析程序作为主程序。将词法分析作为独立的一遍来完成独立的一遍来完成。把词法分析程序作为语法分析程序调用的子程把词法分析程序作为语法分析程序调用的子程序。序。v每当语法分析器需要一个单词符号时就调用这个子程每当语法分析器需要一个单词符号时就调用这个子程序。序。v每一次调用,词法分
10、析器从源程序字符串中识别出一每一次调用,词法分析器从源程序字符串中识别出一个单词符号,并把它的内部表示二元组交给语法分析个单词符号,并把它的内部表示二元组交给语法分析器处理。器处理。113.1.4 源程序的输入源程序的输入、预处理预处理及及超前搜索超前搜索词法分析器工作的第一步是输入源程序文本。词法分析器工作的第一步是输入源程序文本。输输入入串串一一般般放放在在一一个个输输入入缓缓冲冲区区中中。词词法法分分析析器器的的工工作作可可以以直直接接在在输输入入缓缓冲冲区区中中进进行行。但但在在许许多多情情况况下下,可可以以先先预预处处理理输输入入串串,识识别工作将更方便。(参见别工作将更方便。(参见
11、P40 图图3.1)123.1.4 源程序的输入源程序的输入、预处理预处理及及超前搜索超前搜索v预处理的原因预处理的原因 源程序中包含源程序中包含回车回车,换行换行,多余空白符多余空白符,注释行等编辑注释行等编辑字字符符,它们对程序逻辑功能无任何影响,它们对程序逻辑功能无任何影响,在词法分析之前在词法分析之前,首首先要剔除掉这些符号先要剔除掉这些符号,使得词法分析更为简单。使得词法分析更为简单。一行语句结束应配上一个特殊字符说明。一行语句结束应配上一个特殊字符说明。有些语言要识别标号区,区分标号语句,找出续行符连有些语言要识别标号区,区分标号语句,找出续行符连接成完整语句等。接成完整语句等。输
12、出源程序清单以便复核。输出源程序清单以便复核。v 预处理子程序任务预处理子程序任务 从输入缓冲区中读取源程序,预处理后送入扫描缓冲从输入缓冲区中读取源程序,预处理后送入扫描缓冲区。此时,扫描缓冲区的字符都是有效字符。区。此时,扫描缓冲区的字符都是有效字符。词法分析程序这时可以再对扫描缓冲区进行扫描。词法分析程序这时可以再对扫描缓冲区进行扫描。133.1.4 源程序的输入源程序的输入、预处理预处理及及超前搜索超前搜索v超前搜索超前搜索 对于有些语言,关键字不保护,关键字与用户自定义标对于有些语言,关键字不保护,关键字与用户自定义标识符间没有界符,要在上下文环境中识别单词,这时需要识符间没有界符,
13、要在上下文环境中识别单词,这时需要超前搜索方法来识别关键字。超前搜索方法来识别关键字。例如:例如:FORTRANFORTRAN语言:语言:1.1.DO10K=1DO10K=1,50 50 2.2.DO10K=1.50DO10K=1.50v扫描缓冲区的结构扫描缓冲区的结构 (自学自学)16词法分析程序设计词法分析程序设计v 设计方法:设计方法:写出该语言的词法规则;写出该语言的词法规则;把词法规则转换为相应的把词法规则转换为相应的状态转换图状态转换图;把各转换图的初态连在一起,构成识别该把各转换图的初态连在一起,构成识别该 语言的语言的自动机自动机;(4)(4)设计扫描器设计扫描器 173.2
14、正规文法和有限自动机正规文法和有限自动机v 这节介绍这节介绍词法规则词法规则的形式表示的形式表示(正规式正规式),从从正规式正规式向有限自动机的转化向有限自动机的转化.正规式正规式有限自动机有限自动机词法分析器词法分析器控制程序控制程序自动生成器自动生成器转化转化合成合成183.2.1 正规文法、正规集与正规式正规文法、正规集与正规式v正规文法:正规文法:是是chomsky3型文法。型文法。例如:标识符这种单词可以用下面的规则描述例如:标识符这种单词可以用下面的规则描述|(|)表示任意字母,表示任意字母,表示任意数字表示任意数字注:正规文法描述是注:正规文法描述是正规集正规集的文法,可用于描述
15、程序设计的文法,可用于描述程序设计语言的语法部分语言的语法部分。19v 对于一个正规文法的语言提炼出一个简洁的公式,用这个式对于一个正规文法的语言提炼出一个简洁的公式,用这个式子来对它进行子来对它进行形式化的表示形式化的表示,这个式子叫,这个式子叫正规式正规式。v正规式:正规式:也称也称正则表达式正则表达式,是说明是说明单词的模式单词的模式的一种重要的的一种重要的表示法(记号);是定义正规集的数学工具;用来描述单词表示法(记号);是定义正规集的数学工具;用来描述单词符号。符号。3.2.1 正规文法、正规式与正规集正规文法、正规式与正规集注:正规集是集合,可有穷也可无穷。注:正规集是集合,可有穷
16、也可无穷。可通过正规式来形式化表示。可通过正规式来形式化表示。v 正规集:正规集:由正规文法产生的语言所构成的集合。由正规文法产生的语言所构成的集合。203.2.1 正规文法、正规式与正规集正规文法、正规式与正规集下面以标识符为例说明下面以标识符为例说明正规式正规式与与正规集正规集:标识符标识符标识符标识符是以字母开头的字母数字串。是以字母开头的字母数字串。若用若用L L表示字母表示字母,用用D D表示数字表示数字,则标识符可表示为则标识符可表示为:L(L|D):L(L|D)*其中并置表示两者的其中并置表示两者的连接连接,|,|表示两者选一表示两者选一,*,*表示零次或多次引用。表示零次或多次
17、引用。L(L|D)L(L|D)*为为标识符的正规式标识符的正规式,该正规式表示的集合为该正规式表示的集合为标识符的正规集标识符的正规集。21v下面是正规式和它所定义的正规集的递归定义。下面是正规式和它所定义的正规集的递归定义。1),是是 上的正规式上的正规式,所表示的正规集为所表示的正规集为 ,;2)若若 a,则则 a 为正规式为正规式,所表示的正规集为所表示的正规集为 a;3)设设U,V 为为 上的正规式上的正规式,所表示的正规集为所表示的正规集为 L(U),L(V);则则 U|V为为 上的正规式上的正规式,所表示的正规集为所表示的正规集为 L(U)L(V);UV为为 上的正规式上的正规式,
18、所表示的正规集为所表示的正规集为 L(U)L(V);V*为为 上的正规式上的正规式,所表示的正规集为所表示的正规集为 (L(V)*;4)仅当有限次使用上述三步骤而定义的表达式仅当有限次使用上述三步骤而定义的表达式,才是才是 上的正上的正规式规式,而这些而这些正规式所表示的字集才是正规式所表示的字集才是上的正规集。上的正规集。3.2.1 正规文法、正规式与正规集正规文法、正规式与正规集或运算或运算连接积连接积22说明:说明:11上的一个上的一个字字指的是由指的是由中中字符构成的一个有穷序列字符构成的一个有穷序列;不包含任何字符的序列称为空字(不包含任何字符的序列称为空字()。)。*表示表示上所有
19、字的全体上所有字的全体,包括空字(包括空字()。)。例如例如,若若=a,b=a,b 则则*=,a,b,aa,ab,ba,bb,aaa,=,a,b,aa,ab,ba,bb,aaa,2 2 表示不含任何元素的空集表示不含任何元素的空集 。注意注意、和和的区别:的区别:表示不包含任何字符的序列表示不包含任何字符的序列,它是正规集中的一个元素;它是正规集中的一个元素;表示不含任何字的集合表示不含任何字的集合,它是一个空的正规集;它是一个空的正规集;表示由空字组成的集合。表示由空字组成的集合。3.2.1 正规文法、正规式与正规集正规文法、正规式与正规集233 3 使用括号可改变运算符的运算次序。使用括号
20、可改变运算符的运算次序。若若规规定定*优优先先于于,优优先先于于|,|,则则在在不不混混淆淆情情况况下下,可可省省 去括号。去括号。4 R4 R自身的自身的n n次连接记为次连接记为 R Rn n=RR=RRR R5 R5 R0 0=,=,R R*=R=R0 0RR1 1RR2 2RR3 3,R,R*为为R R的闭包的闭包 R R+=RR=RR*,称称R R+是是R R的正闭包。的正闭包。闭闭包包R R*中中的的每每个个字字都都是是由由R R中中的的字字经经过过有有限限次次连连接接而而成成的。的。6 6 对于正规式对于正规式R R和和S,S,若它们表示的正规集若它们表示的正规集L(R)=L(S
21、),L(R)=L(S),则称则称R R和和S S等价等价,记为记为R=SR=S。3.2.1 正规文法、正规式与正规集正规文法、正规式与正规集24v 正规式具有下列性质:正规式具有下列性质:(1)(1)交换律:交换律:R|S=S|R R|S=S|R (2)(2)结合律:结合律:R|(S|T)=(R|S)|T,R(ST)=(RS)T R|(S|T)=(R|S)|T,R(ST)=(RS)T (3)(3)分配律:分配律:R(S|T)=RS|RT,(R|S)T=RT|STR(S|T)=RS|RT,(R|S)T=RT|ST (4)(4)同一律:同一律:R=R=RR=R=R3.2.1 正规文法、正规式与正规
22、集正规文法、正规式与正规集例例3.1=a,b,R=a(a3.1=a,b,R=a(a|b)b)*是是上正规式上正规式,试求试求R R表示的正规集。表示的正规集。解解:L(R)=L(a(a:L(R)=L(a(a|b)b)*)=L(a)L(a)=L(a)L(a|b)b)*)=L(a)(L(a =L(a)(L(a|b)b)*=L(a)(L(a)L(b)=L(a)(L(a)L(b)*=a(ab)=a(ab)*=aa,b=aa,b*=a,a,b,aa,ab,ba,bb,aaa,=a,a,b,aa,ab,ba,bb,aaa,=a,aa,ab,aaa,aab,aba,abb,aaaa,=a,aa,ab,aaa
23、,aab,aba,abb,aaaa,上所有以上所有以a为首的字为首的字25 例例3.2 3.2 判断下述正规式之间是否等价:判断下述正规式之间是否等价:(1)b(ab)(1)b(ab)*与与(ba)(ba)*b (2)(ab)b (2)(ab)*与与a a*b b*解解:(1):(1)b(ab)b(ab)*对应的正规集是对应的正规集是b b后面出现任意多个后面出现任意多个abab对对 L(b(ab)L(b(ab)*)=b,bab,babab,)=b,bab,babab,(ba)(ba)*b b对应的正规集是对应的正规集是b b前面可出现任意个前面可出现任意个baba对对L(L(ba)(ba)*
24、b)=b)=b,bab,babab,b,bab,babab,因此两者等价因此两者等价。正规式正规式b(ab)b(ab)*及及(ba)(ba)*b b都描述以都描述以b b开头且其后跟以零个或任意开头且其后跟以零个或任意多个多个abab所组成的字符串等。故我们说两个正规式等价,所组成的字符串等。故我们说两个正规式等价,(2)(ab)(2)(ab)*对应的正规集以任意个对应的正规集以任意个abab对出现,即对出现,即 abababababab,而而a a*b b*对应的正规集则是任意个对应的正规集则是任意个a a后接任意个后接任意个b,b,即即a aababb,b,因此两者不等价。因此两者不等价。
25、26例例3.3:3.3:设设 =a,ba,b,则则正规式和正规集正规式和正规集:a a b b (a(a b)(ab)(a b)b)a a*(a(a b)b)*aa abab*a,ba,b aa,ab,ba,bbaa,ab,ba,bb ,a,aa,aaa,aaaa,a,aa,aaa,aaaa,=a=an n|n0|n0 ,a,b,aa,ab,ba,bb,aaa,aab,abb,a,b,aa,ab,ba,bb,aaa,aab,abb,bab,bba,bbb.bab,bba,bbb.=a,b=a,b*a,ab,abb,abbb,abbbb,.a,ab,abb,abbb,abbbb,.=ab =ab
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法 分析 编译 原理 陈火旺
限制150内