编译原理复习(3)词法分析
词法分析任务:从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串。
词法分析器:又称扫描器:执行词法分析的程序
对于词法分析器的要求
功能和输出形式
功能:输入 源程序,输出单词符号
通常二元式表示:(单词种别,单词自身的值)
单词符号的分类
(1)关键字:由程序语言定义的具有固定意义的标识符,也
称为保留字或基本字。
例如:Pascal 语言中 begin end if while 等。
(2)标识符:用来表示各种名字。
如变量名、数组名、过程名等。
(3)常数:整型、实型、布尔型、文字型等
例:100 3.14159 true ‘sample’
(4)运算符:+、-、*、/
(5)界符: , ; ( ) 等
接口设计
1、词法分析器作为独立的一遍
2、词法分析器不作为独立的一遍
作为一个独立的子程序,词法分析和语法分析放在同一遍里,省掉了中间文件。
优点:
1.使整个编译程序的结构更简洁、清晰和条理化.
2. 提高编译程序的效率
3.增强编译程序的可移植性
词法分析器的设计
输入和预处理
预处理:
剔掉空白符、跳格符、回车符、换行符、注解部分等。
预处理子程序:
每当词法分析器调用时,就处理出一串确定长度(如120个字符)的输入字符,并将其装进词法分析器所确定的扫描缓冲区中。
扫描缓冲区的两个指示器:
起点指示器,一个指向当前正在识别的单词的开始位置(即新单词的首字符)
搜索指示器,一个用于向当前搜索以寻找单词的终点
单词符号的识别
超前搜索。
1.关键字的识别
需要超前搜索才能确定哪些是基本字
2.标识符的识别
字母开头的字母数字串,后跟界符或算符
3.常数的识别
识别出算术常数并将其转变为二进制内码表示。有些也要超前搜索。
4.算符和界符的识别
把多个字符复合而成的算符和界符拼合成一个单一单词符号。:=, **, .EQ. , ++,--,>=
状态转换图及其实现
状态转换图:有限方向图
结点: 代表状态, 用圆圈表示, 状态之间用弧连接.
箭弧上的标记(字符): 代表在射出结点(即始结点)状态下可能出现的输入字符或字符类.
一个状态转换图可用于识别(或接受)一定的字符串。
状态转换图的实现
实现方法:用程序实现,让每个状态结点对应一小段程序。