第2章词法分析 记号(token) 源程序 词法分析器 语法分析器 取下一个记号 符号表 本章内容 词法分析器:把构成源程序的字符流翻译成 记号流,还完成和用户接口的一些任务 一围绕词法分析器的自动生成展开 一介绍正规式、状态转换图和有限自动机概念
第2章 词法分析 词法分析器 语法分析器 记号(token) 源程序 词 分析 取下一个记号 符号表 本章内容 – 词法分析器:把构成源程序的字符流翻译成 记号流,还完成和用户接口的一些任务 – 围绕词法分析器的自动生成展开 – 介绍正规式、状态转换图和有限自动机概念
2.1词法记号及属性 2.1.1词法记号、模式、词法单元 记号名 词法单元例举 模式的非形式描述 if if 字符i,f for for 字符f,0,r relation <,<=,== <或<=或==或. id sum, count,D5 由字母开头的字母数字串 number 3.1,10,2.8E12 任何数值常数 literal “seg.error" 引号“和”之间的任意字 符串,但引号本身除外
2 1. 词法记号及属性 2.1.1 词法记号、模式、词法单元 记号名 词法单元例举 模式的非形式描述 if if 字符i, f for for 字符f, o, r relation < , <= , == , … < 或 <= 或 == 或 … id sum, count, D5 由字母开头的字母数字串 由字母开头的字母数字串 number 3.1, 10, 2.8 E12 任何数值常数 literal “seg. error” 引号“和”之间的任意字 符串,但引号本身除外
2.1词法记号及属性 历史上词法定义中的一些问题 一忽略空格带来的困难 (如Fortrani语言) D08I=3.75 D08I=3.75 D08I=3,75 关键字不保留(如Fortran语言) IF THEN THEN THEN-ELSE:ELSE 关键字、保留字和标准标识符的区别 一保留字是语言预先确定了含义的词法单元 标准标识符也是预先确定了含义的标识符,但程 序可以重新声明它的含义
2 1. 词法记号及属性 • 历史上词法定义中的一些问题 – 忽略空格带来的困难 忽略空格带来的困难(如 F t or ran语言) DO 8 I 3. 75 DO8I 3. 75 DO 8 I 3, 75 – 关键字不保留(如 Fortran Fortran语言) IF THEN THEN THEN=ELSE;ELSE … • 关键字、保留字和标准标 符识 的区别 – 保留字是语言预先确定了含义的词法单元 – 标准标识符也是预先确定了含义的标识符,但程 序可以重新声明它的含义
2.1词法记号及属性 2.1.2词法记号的属性 position initial rate 60 的记号和属性值: id,指向符号表中position条目的指针) (assign op) id,指向符号表中initial条目的指针〉 <add op) id,指向符号表中rate条目的指针〉 〈nul_op〉 number,整数值60
2 1. 词法记号及属性 2.1.2 词法记号的属性 posii i ii ition = initial + rate 60 的记号 属性值 和 : id,指向符号表中position条目的指针 assign _ op id,指向符号表中initial条目的指针 add_op id,指向符号表中rate条目的指针 mul_ op number,整数值60
2.1词法记号及属性 2.1.3词法错误 一词法分析器对源程序采取非常局部的观点 -例:难以发现下面的错误 fi(a=f(x)).… 在实数是a.b格式下,可以发现下面的错误 123.x 紧急方式的错误恢复 删掉当前若干个字符,直至能读出正确的记号 错误修补 进行增、删、替换和交换字符的尝试
2 1. 词法记号及属性 2.1.3 词法错误 – 词法分析 对 程序采 非常 部的 点 法分析器对源程序采取非常局部的观点 – 例:难以发现下面的错误 fi (a == f (x) ) … – 在实数是a.b格式下,可以发现下面的错误 123.x – 紧急方式的错误恢复 删掉当前若干个字符,直至能读出正确的记号 – 错误修补 进行增、删、替换和交换字符的尝试