compiler2词法分析.ppt
《compiler2词法分析.ppt》由会员分享,可在线阅读,更多相关《compiler2词法分析.ppt(73页珍藏版)》请在三一办公上搜索。
1、第二章 词法分析,一、教学目的熟悉编译程序的词法分析器的结构和功能,掌握自动机与正则表达式的概念,以及它们之间的相互转换。二、教学的难点与重点1、自动机DFA,NFA概念2、正则表达式RE概念3、自动机与正则表达式之间的转换(等价性),2.1 词法分析程序概述,2.1.1 词法分析程序的功能2.1.2 词法分析程序的实现方案2.1.3 单词的种类及输出形式2.1.4 C-(Minus)Token的表示方法2.1.5 词法结构的表示及识别方法,2.1.1 词法分析程序的功能,词法分析:根据词法规则识别及组合单词,进行词法检查。对数字常数完成数字字符串到(二进制)数值的转换。删去空格字符和注解。,
2、“字符”程序,“单词”程序或“字符序列”程序,词法分析程序,2.1.2 词法分析程序的实现方案,1.词法分析单独作为一遍,2.词法分析程序作为单独的子程序,S.P.(字符串),词法分析,S.P.(符号串),语法分析,第一遍,第二遍,单词串,S.P.(字符串),词法分析程序,语法分析程序,取单词,单词,优点:结构清晰、各遍功能单一缺点:效率低,1)保留字:if、then2)标识符:3)常数:无符号数、布尔常数4)符号:+、-、*,1.单词的种类:,固定串,用户定义串,用户定义串,特殊符号,2.1.3 单词的种类及输出形式,2.词法分析程序的输出形式-单词的内部形式,几种常用的单词内部形式:1)按
3、单词种类分类2)保留字和分界符采用一符一类,单词名称标识符无符号常数(整)无符号浮点数布尔常数字符串常数保留字分界符,类别编码1234567,单词值内部字符串整数值数值0 或 1内部字符串保留字或内部编码分界符或内部编码,1)按单词种类分类,2)保留字和分界符采用一符一类,单词名称标识符无符号常数(整)无符号浮点数布尔常数字符串常数IFTHENELSEFOR:+*,(,类别编码123456789.20212223.,单词值内部字符串整数值数值0 或 1内部字符串-.-,2.1.4 C-(Minus)Token的表示方法,typedef enum/*reserved words*/IF,THEN
4、,ELSE,END,REPEAT,UNTIL,READ,WRITE,/*multicharacter tokens*/ID,NUM,/*special symbols*/ASSIGN,EQ,LT,PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,SEMI TokenType;,单词的类型,例:C-(Minus)Token的表示方法,typedef struct TokenType tokenval;char*stringval;int numval;TokenRecord;,单词的属性,typedef struct TokenType tokenval;union cha
5、r*stringval;int numval;attribute;TokenRecord;,例:Token的扫描,TokenType getToken(void);getToken函数在调用时从输入中返回下一个记号,例:源程序:a index=4+2 假定代码行放一输入缓冲区。getToken的调用:跳过4个空格,识别由单个字符a 组成的串“a”,并返回记号值ID作为下个记号,此时的输入缓冲区如下所示:因此,getToken随后的调用将再次从左括号字符开始识别过程。,2.1.5 词法结构的表示及识别方法,词法结构的表示方法:正则表达式词法结构的识别方法:有穷自动机,2.2 正则表达式Regul
6、ar Expression,2.2.1 正则表达式概述2.2.2 用正则表达式的运算符构造正则表达式2.2.3 程序设计语言中的正则表达式2.2.4 正则表达式与3型文法等价,2.2.1 正则表达式概述,有字母表,定义在 上的正则表达式和正则集合递归定义如下:1和都是 上的正则表达式,它们所表示的正则集合分别为:和;2任何a,a是上的正则表达式,它所表示的正则集合为:a;3假定U和V是上的正则表达式,它们所表示的正则集合分别记为L(U)和L(V),那么U|V,UV和U*也都是 上的正则表达式,它们所表示的正则集合分别为L(U)L(V)、L(U)L(V)和L(U)*4任何上的正则表达式和正则集合
7、均由1、2和3产生。,1.正则表达式和正则集合的定义,正则表达式中的运算符:|-或-连接*-重复(闭包),两正则表达式相等 两正则表达式表示的语言相等,2.正则表达式的运算符,设e1,e2和e3均是某字母表上的正则表达式,则有:单位正则表达式:e=e=e 交换律:e1|e2=e2|e1结合律:e1|(e2|e3)=(e1|e2)|e3 e1(e2e3)=(e1e2)e3分配律:e1(e2|e3)=e1e2|e1e3(e1|e2)e3=e1e3|e2e3 此外:r*=(r|)*r*=r*(r|s)*=(r*s*)*,3.正则表达式的性质:,2.2.2 用正则表达式的运算符构造正则表达式,ba*,
8、(a|b)*(aa|bb)(a|b)*,上所有以a为首的字的集合,例:令=a,b,上的正规式和相应的正规集如下:,例 2:令=A,B,0,1,则:,例 3:令=d,.,e,+,-,则上的无符号数的正则式 表示为:,(提示:无符号数包括无符号的整数、实数、科学计数法表示的数),上的“标识符”的全体上的“数”的全体,例 3:令=d,.,e,+,-,则上的无符号数的正则式表示为:,dd*(.dd*|)(e(+|-|)dd*|),dd*(.dd*|)(e(+|-|)dd*|),dd*,解:,dd*(.dd*|)(e(+|-|)dd*|),dd*(.dd*|)(e(+|-|)dd*|),dd*(.dd*
9、|)(e(+|-|)dd*|),dd*.dd*,dd*(.dd*|)e+dd*,dd*(.dd*|)(e(+|-|)dd*|),dd*(.dd*|)e-dd*,dd*(.dd*|)edd*,2.2.3 程序设计语言中的正则表达式,例1:数字集D=0,1,9和字母集L=A|Z|a|z,D0|1|.|9L A|B|Z|a|b|z,例2:整常数的集合IntC可表示为:,IntCDD*或IntCD|IntC D IntC IntC D|DIntCD|D IntC IntC D IntC|D,例3:实常数的集合RealC可表示为:,RealC DD*.DD*或RealCIntC.IntC,“”读作“定义
10、为”,IDEL(L|D)*(_(L|D)+)*,例5:由/开始并以Eol(行结束符)结束的注释,可用正则表达式定义为如下:,Comment/(Not(Eol)*Eol其中Not(A)表示关于给定符号表的A的余集:-A,例4:由字母、数字和下划线组成,由字母为首,以字母或数字结束,且下划线不相连的标识符之集IDE可表示为如下:,2.2.4 正则表达式与3型文法等价,例如:正则表达式:ba*a(a|b)*3型文法:Z Za|b ZZa|Zb|a,Z=bZ=Za=baZ=Za=Zaa=baaZ=Za=Zaa=Zaaa=baaa,ba*,2.3 有穷自动机 Finite Automata,2.3.1
11、状态转换图2.3.2 确定有穷自动机(DFA)2.3.3 非确定的有穷自动机(NFA)2.3.4 NFA的确定化2.3.5 DFA的化简 2.3.6 正则表达式与DFA的等价性,2.3.1 状态转换图,S,U,V,Z,1,1,1,0,0,0,例:从下图结点S出发,最终到达结点Z,请判断01101 或1001可否为路径上符号的连结?,结点代表状态,用圆圈表示。状态之间用箭弧连结,箭弧上的标记(字符)代表在射出结点(即箭弧始结点)状态下可能出现的输入字符或字符类。一张转换图只包含有限个状态(即有限个结点),其中一个为初态,至少一个为终态(双圈表示)。,状态转换图,状态转换图是设计词法分析程序的一种
12、好途径。状态转换图,一张有限方向图,规定:,例3:识别整数的转换图(如右上图),例2:识别标识符的转换图(如左下图),字母,0,字母或数字,数字,0,数字,表示:在状态1下,若输入字符为x,则读进x,并转换到状态2;若输入字符为y,则读进y,并转换到状态3。,例1:,文法:1.:=字母|字母|数字 2.:=数字|数字 3.:=:|+|*|,|(|)4.:=5.:=:,读字符,查保留字表,返回S,一个确定的有穷自动机(DFA)M是一个五元式:M=(S,,,S0,Z),其中:1.S 有穷状态集(非终极符集合)2.输入字母表(终极符集合)3.映射函数(也称状态转换函数)SS(s,a)=S,S,S S
13、,a4.S0 唯一的初始状态 S0 S5.Z终止状态集 ZS,2.3.2 确定有穷自动机(DFA)状态转换图的形式化,“确定”即状态转移函数是单值函数!,例:有DFA M=(0,1,2,3,a,b,0,3)其中为:(0,a)=1(0,b)=2(1,a)=3(1,b)=2(2,a)=1(2,b)=3(3,a)=3(3,b)=3,它所对应的状态转移矩阵如图:,2.状态转移矩阵,一个DFA可用一个矩阵表示,该矩阵的行表示状态,列表示输入字符,矩阵元素表示(s,a)的值,这个矩阵称状态转移矩阵。,状态,输入字符,后继状态,状态转换图可用于识别(或接受)一定的字符串,其中为:(0,a)=1(0,b)=2
14、(1,a)=3(1,b)=2(2,a)=1(2,b)=3(3,a)=3(3,b)=3,a,a,a|b,0,1,b,b,a,b,2,例:有DFA M=(0,1,2,3,a,b,0,3),DFA也可以用状态转换图表示,相关概念,对于中的任何字,若存在一条从初态结点到某一终态结点的通路,且这条通路上的所有弧的标记符连接成的字等于,则称可被DFA M所识别(读出或接受)。,若M的初态结点同时有是终态结点,则空字可为M所识别(或接受)。,a1,a2,an,如果存在状态序列S0,S1,Sn使得S0 S1 S1 S2 Sn-1 Sn,S0为初态,Sn为任一接受态,则称字符串a1a2an被有限自动机A所接受。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- compiler2 词法 分析
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5360579.html