




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章第二章 词法分析词法分析 本章内容本章内容 词法分析器:把构成源程序的字符流翻译成词法分析器:把构成源程序的字符流翻译成 记号流,记号流,还完成和用户接口的一些任务还完成和用户接口的一些任务 围绕词法分析器的自动生成展开围绕词法分析器的自动生成展开 介绍正规式、状态转换图和有限自动机概念介绍正规式、状态转换图和有限自动机概念 词法分析器词法分析器 语法分析器语法分析器 符号表符号表 记号记号(token) 取下一个记号取下一个记号 源程序源程序 2.1 词法记号及属性词法记号及属性 2.1.1 词法记号、模式、词法单元词法记号、模式、词法单元 记号名记号名词法单元例举词法单元例举模式的非
2、形式描述模式的非形式描述 if if 字符字符i, f for for字符字符f, o, r relation , = , = , 或或 0) 2.2 词法记号的描述与识别词法记号的描述与识别 语言的运算语言的运算 并:并:l m = s | s l 或或 s m 连接连接:lm = st | s l 且且 t m 幂:幂:l0是是 ,li是是li -1l 闭包:闭包:l = l0 l1 l2 正闭包:正闭包: l+ = l1 l2 例例 l: a, b, , z, a, b, , z , d: 0, 1, , 9 l d, ld, l6, l*, l(l d )*, d+ 2.2 词法记号的
3、描述与识别词法记号的描述与识别 2.2.2 正规式正规式 正规式正规式用来表示简单的语言,用来表示简单的语言,叫做叫做正规集正规集 正规式正规式定义的语言定义的语言备注备注 a a a (r) | (s)l(r)l(s) r和和s是正规式是正规式 (r)(s)l(r)l(s) r和和s是正规式是正规式 (r)*(l(r)* r是正规式 是正规式 (r)l(r) r是正规式是正规式 (a) (b)*)| (c)可以写成可以写成ab*| c 2.2 词法记号的描述与识别词法记号的描述与识别 正规式的例子正规式的例子 = = a, b a | ba, b (a | b) (a | b )aa, ab
4、, ba, bb aa | ab | ba | bbaa, ab, ba, bb a*由字母由字母a构成的所有串集构成的所有串集 (a | b)*由由a和和b构成的所有串集构成的所有串集 复杂的例子复杂的例子 ( 00 | 11 | ( (01 | 10) (00 | 11) (01 | 10) ) ) 句子:句子:01001101000010000010111001 2.2 词法记号的描述与识别词法记号的描述与识别 2.2.3 正规定义正规定义 对正规式命名,使表示简洁对正规式命名,使表示简洁 d1 r1 d2 r2 . . . dn rn 各个各个di的名字都不同的名字都不同 每个每个ri
5、都是都是 d1, d2, , di-1 上的正规式上的正规式 2.2 词法记号的描述与识别词法记号的描述与识别 正规定义的例子正规定义的例子 c语言的标识符是字母、数字和下划线组成的串语言的标识符是字母、数字和下划线组成的串 letter_ a | b | | z | a | b | | z | _ digit 0 | 1 | | 9 id letter_( (letter_ | |digit) )* 2.2 词法记号的描述与识别词法记号的描述与识别 正规定义的例子正规定义的例子 无符号数集合,例无符号数集合,例1946, ,11.28, ,63e8, ,1.99e 6 digit 0 | 1
6、 | | 9 digits digit digit* optional_fraction . .digits| | optional_exponent ( e ( + | | ) digits ) | numberdigits optional_fraction optional_exponent 简化表示简化表示 number digit+ (.digit+)? (e(+| )? digit+)? 2.2 词法记号的描述与识别词法记号的描述与识别 正规定义的例子(进行下一步讨论的例子)正规定义的例子(进行下一步讨论的例子) while while do do relop | = | = |
7、| | = letter a | b | | z | a | b | | z id letter (letter | digit )* number digit+ (.digit+)? (e (+ | )? digit+)? delim blank | tab | newline ws delim+ 2.2 词法记号的描述与识别词法记号的描述与识别 2.2.4 转换图转换图 关系算符的转换图关系算符的转换图 0 5 1 6 2 4 8 3 7 return(relop, le) return(relop, ne) return(relop, lt) return(relop, ge) retu
8、rn(relop, gt) return(relop, eq) 开始开始 = = * * other other 2.2 词法记号的描述与识别词法记号的描述与识别 标识符和保留字的转换图标识符和保留字的转换图 91011 开始开始 letterother * letter或或digit return(installid( ) 2.2 词法记号的描述与识别词法记号的描述与识别 无符号数的转换图无符号数的转换图 number digit+ (.digit+)? (e (+ | )? digit+)? 开始开始 19 12 131415161718 digit digit digit digit d
9、igit digit other .e+/ e digit other other return( installnum( ) ) * 2.2 词法记号的描述与识别词法记号的描述与识别 空白空白的转换图的转换图 delim blank | tab | newline ws delim+ 2122 开始开始delimother * delim 20 2.3 有有 限限 自自 动动 机机 2.3.1 不确定的有限自动机(简称不确定的有限自动机(简称nfa) 一个数学模型,它包括:一个数学模型,它包括: 1、状态集合、状态集合s 2、输入符号集合、输入符号集合 3、转换函数、转换函数move : s
10、 ( ) p(s) 4、状态、状态s0是唯一的开始状态是唯一的开始状态 5、f s是接受状态集合是接受状态集合 识别语言识别语言 (a|b)*ab 的的nfa 12 开始开始a 0 a b b 输输 入入 符符 号号 ab 00, 10 12 2 状状 态态 nfa的转换表的转换表 2.3 有有 限限 自自 动动 机机 识别语言识别语言 (a|b)*ab 的的nfa 12 开始开始a 0 a b b 2.3 有有 限限 自自 动动 机机 例例 识别识别aa* *| |bb* *的的nfa 12 开始开始 a 0 a b b 34 2.3.2 确定的有限自动机(简称确定的有限自动机(简称dfa)
11、 ) 一个数学模型,包括:一个数学模型,包括: 1、状态集合、状态集合s 2、输入字母集合、输入字母集合 3、转换函数、转换函数move : s s,且可以是部分函数且可以是部分函数 4、唯一的开始状态、唯一的开始状态 s0 5、接受状态接受状态集合集合f s 12 开始开始 a 0 a b b a b 识别语言识别语言 (a|b)*ab 的的dfa 2.3 有有 限限 自自 动动 机机 2.3 有有 限限 自自 动动 机机 例例 dfa,识别,识别0,1上能被上能被5整除的二进制数整除的二进制数 已读过已读过尚未读尚未读已读部分的值已读部分的值 某时刻某时刻10101110005 读进读进0
12、1010 1110005 2 = 10 读进读进110101 1100010 2 + 1= 21 5个状态即可,分别代表已读部分的值除以个状态即可,分别代表已读部分的值除以5的余数的余数 例例 dfa,识别,识别0,1上能被上能被5整除的二进制数整除的二进制数 0123 开始开始 4 1 0 0 1 0 1 0 10 1 2.3 有有 限限 自自 动动 机机 10102 = 1010 1112 = 710 例例 dfa, ,接受接受 0和和1的个数都是偶数的字符串的个数都是偶数的字符串 0000 3 2 1 1 奇奇0奇奇1 奇奇0偶偶1 1 0 1 1 开始开始 偶偶0偶偶1 偶偶0奇奇1
13、2.3 有有 限限 自自 动动 机机 2.3.3 nfa到到dfa的变换的变换 子集构造法子集构造法 1、dfa的一个状态是的一个状态是nfa的一个状态集合的一个状态集合 2、读了输入、读了输入a1 a2 an后后, nfa能到达的所有状态:能到达的所有状态:s1, s2, , sk,则则 dfa到达状态到达状态s1, s2, , sk 12 a 开始开始 0 a b b00, 1 a b a 0, 2 b 2.3 有有 限限 自自 动动 机机 未画完未画完 19 开始开始 0 a b ab 678 23 45 例例 (a|b)*ab,nfa如下,把它变换为如下,把它变换为dfa 2.3 有有
14、 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入符号 ab 状态状态 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入符号 ab a 状态状态 a = 0, 1, 2, 4, 7 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入符号 ab ab 状态状态 a = 0, 1, 2, 4, 7 b = 1, 2, 3, 4, 6, 7, 8 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入
15、符号 ab ab b 状态状态 a = 0, 1, 2, 4, 7 b = 1, 2, 3, 4, 6, 7, 8 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入符号 ab abc b 状态状态 a = 0, 1, 2, 4, 7 b = 1, 2, 3, 4, 6, 7, 8 c = 1, 2, 4, 5, 6, 7 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入符号 ab abc b c 状态状态 a = 0, 1, 2, 4, 7 b = 1, 2, 3, 4, 6, 7,
16、 8 c = 1, 2, 4, 5, 6, 7 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入符号 ab abc bb c 状态状态 a = 0, 1, 2, 4, 7 b = 1, 2, 3, 4, 6, 7, 8 c = 1, 2, 4, 5, 6, 7 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入符号 ab abc bbd c 状态状态 a = 0, 1, 2, 4, 7 b = 1, 2, 3, 4, 6, 7, 8 c = 1, 2, 4, 5, 6, 7 d = 1
17、, 2, 4, 5, 6, 7, 9 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入符号 ab abc bbd c d 状态状态 a = 0, 1, 2, 4, 7 b = 1, 2, 3, 4, 6, 7, 8 c = 1, 2, 4, 5, 6, 7 d = 1, 2, 4, 5, 6, 7, 9 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入符号 ab abc bbd cbc d 状态状态 a = 0, 1, 2, 4, 7 b = 1, 2, 3, 4, 6, 7, 8
18、c = 1, 2, 4, 5, 6, 7 d = 1, 2, 4, 5, 6, 7, 9 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入符号 ab abc bbd cbc dbc 状态状态 a = 0, 1, 2, 4, 7 b = 1, 2, 3, 4, 6, 7, 8 c = 1, 2, 4, 5, 6, 7 d = 1, 2, 4, 5, 6, 7, 9 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 输入符号输入符号 ab abc bbd cbc dbc 状态状态 bd 开始开始a a
19、 a b b a b c b a 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 bd 开始开始a a a b b a b c b a 12 开始开始a 0 a b b a b 识别语言识别语言 (a|b)*ab 的的自动机自动机 2.3 有有 限限 自自 动动 机机 19 开始开始 0 a b ab 678 23 45 bd 开始开始a a a b b a b c b a 12 开始开始a 0 a b b a b 识别语言识别语言 (a|b)*ab 的的自动机自动机 子集构造法不一子集构造法不一 定得到最简定得到最简dfa 2.3 有有 限限 自自
20、 动动 机机 bd 开始开始a a a b b a a, b c b a e b 2.3.4 dfa的化简的化简 死状态死状态 在转换函数由部分函数改成全函数表示时引入在转换函数由部分函数改成全函数表示时引入 左图需要引入死状态左图需要引入死状态e ;右图无须引入死状态;右图无须引入死状态 bd 开始开始a a a b b a b c b a 2.3 有有 限限 自自 动动 机机 可区别的状态可区别的状态 a和和b是可区别的状态是可区别的状态 从从a出发,读过串出发,读过串b,到达非接受状态,到达非接受状态c,而,而 从从b出发,读过串出发,读过串b,到达接受状态,到达接受状态d a和和c是不
21、可区别的状态是不可区别的状态 无任何串可用来像上面这样无任何串可用来像上面这样 区别它们区别它们 bd 开始开始a a a b b a b c b a 2.3 有有 限限 自自 动动 机机 方法方法 1. a, b, c, d move(a, b, c, a) = b move(a, b, c, b) = c, d 2. a, c, b, d move(a, c, a) = b move(a, c, b) = c bd 开始开始a a a b b a b c b a 1 2 开始开始a 0 a b b a b 2.3 有有 限限 自自 动动 机机 从正规式建立识别器的步骤从正规式建立识别器的步
22、骤 从正规式构造从正规式构造nfa(本节介绍)本节介绍) 用语法制导的算法,它用正规式语法结构来指导用语法制导的算法,它用正规式语法结构来指导 构造过程构造过程 把把nfa变成变成dfa (子集构造法,已介绍)子集构造法,已介绍) 将将dfa化简化简 (合并不可区别状态,也已介绍)(合并不可区别状态,也已介绍) 2.4 从正规式到有限自动机从正规式到有限自动机 首先构造识别首先构造识别 和字母表中一个符号的和字母表中一个符号的nfa 重要特点:仅一个接受状态,它没有向外的转换重要特点:仅一个接受状态,它没有向外的转换 i 开始开始 识别正规式识别正规式 的的nfa a fif 开始开始 识别正
23、规式识别正规式a的的nfa 2.4 从正规式到有限自动机从正规式到有限自动机 构造识别主算符为选择的正规式的构造识别主算符为选择的正规式的nfa 重要特点:仅一个接受状态,它没有向外的转换重要特点:仅一个接受状态,它没有向外的转换 f i 开始开始 识别正规式识别正规式s | t 的的nfa n (s) n (t) 2.4 从正规式到有限自动机从正规式到有限自动机 构造识别主算符为连接的正规式的构造识别主算符为连接的正规式的nfa 重要特点:仅一个接受状态,它没有向外的转换重要特点:仅一个接受状态,它没有向外的转换 i n (s) f 开始开始 识别正规式识别正规式 st 的的nfa n (t
24、) 2.4 从正规式到有限自动机从正规式到有限自动机 构造识别主算符为闭包的正规式的构造识别主算符为闭包的正规式的nfa 重要特点:仅一个接受状态,它没有向外的转换重要特点:仅一个接受状态,它没有向外的转换 n (s) f 开始开始 识别正规式识别正规式 s* 的的nfa i 2.4 从正规式到有限自动机从正规式到有限自动机 对于加括号的正规式对于加括号的正规式(s),使用使用n(s)本身作为本身作为 它的它的nfa 2.4 从正规式到有限自动机从正规式到有限自动机 本方法产生的本方法产生的nfa有有下列性质下列性质 n(r)的状态数最多是的状态数最多是r中符号和算符总数的两倍中符号和算符总数
25、的两倍 n(r)只有一个接受状态,接受状态没有向外的转只有一个接受状态,接受状态没有向外的转 换换 2.4 从正规式到有限自动机从正规式到有限自动机 1 9 开始开始 0 a b ab 678 23 45 本方法产生的本方法产生的nfa有有下列性质下列性质 n(r)的每个状态有一个用的每个状态有一个用 的符号标记的指向其它的符号标记的指向其它 结点的转换,或者最多两个指向其它结点的结点的转换,或者最多两个指向其它结点的 转转 换换 2.4 从正规式到有限自动机从正规式到有限自动机 1 9 开始开始 0 a b ab 678 23 45 2.4 从正规式到有限自动机从正规式到有限自动机 1 9
26、开始开始 0 a b ab 678 23 45 r9 r7 r8 r4 r3 r5 r6 * )( r2r1 a | b a b (a|b)*ab的分解的分解 2.4 从正规式到有限自动机从正规式到有限自动机 1 9 开始开始 0 ab 678 a b 23 45 r9 r7 r8 r4 r3 r5 r6 * )( r2r1 a | b a b (a|b)*ab的分解的分解 2.4 从正规式到有限自动机从正规式到有限自动机 1 9 开始开始 0 a b ab 678 23 45 r9 r7 r8 r4 r3 r5 r6 * )( r2r1 a | b a b (a|b)*ab的分解的分解 2.
27、4 从正规式到有限自动机从正规式到有限自动机 1 9 开始开始 0 a b ab 678 23 45 r9 r7 r8 r4 r3 r5 r6 * )( r2r1 a | b a b (a|b)*ab的分解的分解 2.4 从正规式到有限自动机从正规式到有限自动机 1 9 开始开始 0 a b ab 678 23 45 r9 r7 r8 r4 r3 r5 r6 * )( r2r1 a | b a b (a|b)*ab的分解的分解 2.4 从正规式到有限自动机从正规式到有限自动机 1 9 开始开始 0 a b ab 678 23 45 r9 r7 r8 r4 r3 r5 r6 * )( r2r1
28、a | b a b (a|b)*ab的分解的分解 2.4 从正规式到有限自动机从正规式到有限自动机 1 9 开始开始 0 a b ab 678 23 45 r9 r7 r8 r4 r3 r5 r6 * )( r2r1 a | b a b (a|b)*ab的分解的分解 (a|b)*ab的两个的两个nfa的比较的比较 1 2 开始开始a 0 a b b 1 9 开始开始 0 a b ab 678 23 45 手工构造手工构造: 算法构造算法构造: 2.4 从正规式到有限自动机从正规式到有限自动机 小结:从正规式建立识别器的步骤小结:从正规式建立识别器的步骤 从正规式构造从正规式构造nfa 把把nf
29、a变成变成dfa 将将dfa化简化简 存在其它办法存在其它办法 2.4 从正规式到有限自动机从正规式到有限自动机 用用lex建立词法分析器的步骤建立词法分析器的步骤 lex 编译器编译器 lex源程序源程序lex.l lex.yy.c c 编译器编译器 lex.yy.ca.out a.out 输入流输入流 记号序列记号序列 2.5 词法分析器的生成器词法分析器的生成器 lex程序包括三个部分程序包括三个部分 声明声明 翻译规则翻译规则 辅助过程辅助过程 lex程序的翻译规则程序的翻译规则 p1动作动作1 p2动作动作2 pn动作动作n 2.5 词法分析器的生成器词法分析器的生成器 例例声明部分
30、声明部分 % /* * 常量常量lt, le, eq, ne, gt, ge, while, do, id, number, relop的定义的定义* */ % /* * 正规定义正规定义 * */ delim t n wsdelim+ lettera za z digit0 9 idletter(letter|digit)* * numberdigit+( .digit+)?(e+ ?digit+)? 2.5 词法分析器的生成器词法分析器的生成器 例例翻译规则部分翻译规则部分 ws/* * 没有动作,也不返回没有动作,也不返回 * */ whilereturn (while); doretu
31、rn (do); idyylval = install_id ( ); return (id); numberyylval = install_num( ); return (number); “ ”yylval = lt; return (relop); “ = ” yylval = le; return (relop); “ = ”yylval = eq; return (relop); “ ”yylval = ne; return (relop); “ ”yylval = gt; return (relop); “ = ”yylval = ge; return (relop); 2.5
32、词法分析器的生成器词法分析器的生成器 例例辅助过程部分辅助过程部分 install_ id ( ) /* * 把词法单元装入符号表并返回指针。把词法单元装入符号表并返回指针。 yytext指向该词法单元的第一个字符,指向该词法单元的第一个字符, yyleng给出的它的长度给出的它的长度* */ install_num ( ) /* * 类似上面的过程,但词法单元不是标识符而类似上面的过程,但词法单元不是标识符而 是数是数 * */ 2.5 词法分析器的生成器词法分析器的生成器 词法分析器的作用和接口,用高级语言编写词法分析器的作用和接口,用高级语言编写 词法分析器等内容词法分析器等内容 掌握下面涉及的一些概念,它们之间转换的掌握下面涉及的一些概念,它们之间转换的 技巧、方法或算法技巧、方法或算法 非形式描述的语言非形式描述的语言 正规式正规
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妇幼保健员考试知识点总结与复习资料分享试题及答案
- 妇幼保健员考试准备系列分享试题及答案
- 健康促进行动试题及答案
- 健康管理师多元发展试题与答案
- 2025妇幼保健员考试重点知识点及试题及答案
- 茶s文化渊源探讨试题及答案
- 2025年度美甲店合伙人合作经营风险共担合同
- 2025年度茶楼合伙协议书:茶楼茶艺表演与活动策划合作协议
- 2025健康管理师考试参考试题答案
- 二零二五年度入职员工保密合同-新材料研发成果保密
- 二、女性青春期保健课件
- 2022年江苏医药职业学院单招考试面试试题及答案解析
- 三年级语文下册第三单元语文园地三(说课稿)
- 房地产开发企业合约规划书(共40)
- 重大危险源辨识GB18218-2000
- 餐饮服务投标文件
- (完整word)发票模板格式
- 通用技术试题库(含答案)
- 生产线线长工作职责
- LF精炼工艺技术课件
- 鼻饲技术(最新)ppt课件(PPT 31页)
评论
0/150
提交评论