编辑: wtshxd | 2019-07-03 |
1 编译原理与技术 词法分析(1) 2015/9/6 《编译原理与技术》讲义
2 词法分析 ? 词法分析器介绍 ? 正规式与正规集 ? 有限自动机 ? 词法分析器的自动生成-Lex 2015/9/6 《编译原理与技术》讲义
3 词法分析器介绍 ? 词法分析器的功能 高级语言 源程序 词法分 析器 语法分 析器 token get_next_token 编译器其 它阶段 符号表 字符流 记号 (流) 2015/9/6 《编译原理与技术》讲义
4 词法分析器介绍 ? 词法分析器的功能 ? 读源程序,产生记号序列 ? 剥去源程序中的注释(块、行)和 空白 符?预处理-宏处理与文件包含 2015/9/6 《编译原理与技术》讲义
5 词法分析器介绍 ? 词法分析器作为独立子程序 ? 简化设计 ? 提高编译效率 ? 增强可移植性 2015/9/6 《编译原理与技术》讲义
6 词法分析器介绍 ? 记号、模式与单词 ? 记号-同类单词的总称 ? 模式-描述构成记号的字符串的规则 ? 单词-源程序中能匹配任一记号的字符串 2015/9/6 《编译原理与技术》讲义
7 程序语言的记号(1) 记号 单词 模式 关键字 WHILE while while FOR for for 标识符 ID temp, i, max 字母开头的字母数字串 常数 NUM 3.
14
100 数字字符串{.数字字符串} 2015/9/6 《编译原理与技术》讲义
8 程序语言的记号(2) 记号 单词 模式 运算符 MUL * * GT >
>
界符 , , , 串常量 STRING hello '
there'
双(单)引号中间的字符 串(不包括引号本身) 2015/9/6 《编译原理与技术》讲义
9 词法分析器介绍 ? 词法分析器的二元输出 单词(字符 串)的类别 匹配记号的单词多于 一个时,须提供额外 的信息以区别之 2015/9/6 《编译原理与技术》讲义
10 词法分析器介绍 ? 词法分析器的二元输出 记号影响语法 分析的决策 属性(如类型、 偏移)则关系到 记号的翻译 2015/9/6 《编译原理与技术》讲义
11 词法分析器介绍 ? e.g.1 pascal源程序片段: begin length := length + 1;
if length 2015/9/6 《编译原理与技术》讲义
15 词法分析器介绍 ? 超前搜索 ? FORTRAN中的关键字 不保留 1) DO100K=1,10 2) DO100K=1.10 3) IF(5.EQ.M) I=10 4) IF(5)=55 ? 有关算符的识别 C/C++, java的+等,与之对应 2015/9/6 《编译原理与技术》讲义
16 词法分析器介绍 ? 词法错误 ? 可检测非法字符的出现 ? if VS fi ? 词法分析器的设计 ? 手工编写-采用汇编语言或高级语言 ? 自动生成-Lex 2015/9/6 《编译原理与技术》讲义
17 词法分析器介绍 ? 状态转换图 用于记号的识别.状态之间用带有标记(字符)的 有向边连接;
每读入一个字符会引起状态变化,直 至单词(记号)被识别出来. 开始状态:状态转换图的初始状态(尚未读字符) 接受状态:某个单词被识别时所处的状态(终态) 单词(记号)的识别过程即是从开始状态出发到某 接受状态的变化过程. 2015/9/6 《编译原理与技术》讲义
18 词法分析器介绍 ? 状态转换图
0 1
2 字母 其它 字母或数字 识别标识符的转换图 *
0 3
4 数字 其它 数字 识别整数的转换图 * 2015/9/6 《编译原理与技术》讲义
19 词法分析器介绍 ? 状态转换图
0 5 数字 . 识别Pascal无符号数的转换图 * 数字
6 7
8 9
10 11 数字 数字 E +|- 数字 数字 其它 E 数字 其它 其它 2015/9/6 《编译原理与技术》讲义
20 词法分析器介绍 ? 状态转换图