1、第三章 词法分析概述m正规式 描述单词m有限自动机 识别单词mNFADFAm正规式 NFAm正规式 DFAmDFA的化简3.1 词法分析器的角色1. 字符流 单词流2. 用户接口:过滤注释、空白符,错误信息,预处理lexical analyzer parsersymbol tablesource programtokenget next token3.1.2 基本术语m 单词 , tokenq 源代码字符串集的分类q , m 模式 , patternq 描述 “字符串集如何分类为单词 ”的规则q 正规表达式, A-Z*.*m 词素 , lexemeq 程序中实际出现的字符串,与模式匹配,分类为
2、单词q i, count, name, 60基本术语(续)Token Sample Lexemes Informal Description of Patternconstifrelationidnumliteralconstif, , =pi, count, D23.1416, 0, 6.02E23“core dumped”constifor = or letter followed by letters and digitsany numeric constantany characters between “ and ” except “单词类别 实际词素,其相关信息很关键:1. 保存入
3、符号表2. 返回给语法分析器单词单词 符号串集合3.1.3 单词属性m词素的更多信息m单词 影响语法分析m属性 影响翻译例 3.1: E := M * C * 23.1.4 词法错误m 较少:词法分析是对源程序极为局部化的视角mfi (a = f(x) 词法分析无法发现m 什么情况下发生? 剩余输入的前缀无法与任何一个模式相匹配m 可能的错误修复方法q 删除、插入字符q 替换、交换字符q 最短编辑距离3.2 缓冲技术m 三种实现方式1. 自动生成工具 Lex ,生成工具提供读取输入和缓冲的函数2. 高级语言手工编码,利用高级语言提供的 I/O函数3. 汇编语言编程,直接访问磁盘m 13,性能 ,实现难度 m 唯一读取文件的阶段,值得优化