词法分析的任务:从左至右逐个字符的对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为由单词符号串组成的程序。
3.1对词法分析器的要求
源程序 —> 词法分析器 —> 单词符号
单词符号:指语言中具有独立意义的最小的语法符号。
单词符号的种类:
* 关键字(保留字、基本字):是由程序语言定义的具有固定意义的标识符。
* 标识符:用来表示各种名字,如变量名、数组名、过程名等。
* 常数:整型、实型、布尔型、文字型等。
* 运算符:+、-、*、/等。
* 界符:,、;、()、/*、*/等。
单词种别:单词种别通常用整数编码
标识符:一般统归为一种。
常数:宜按类型(整、实、布尔等)分种。
关键字:可将全体视为一种,也可一字一种。
运算符:一符一种,也可把具有一定共性的运算符视为一种。
界符:一符一种。
[注]:
1.若一个种别只包含一个单词符号(一种一字),对于该单词符号,种别编码就可以代表它自身了。
例如:关键字,运算符,界符
2.若一个种别包含有多个单词符号(一种多字),对于该种别的每个单词符号,除了给出种别编码,还需给出单词符号的属性值
例如:整型常数,实型常数,布尔常数,标识符
3.2词法分析器
单词符号的识别:
1. 超前搜索
在单词识别的过程中,通过向前多读几个符号的形式,准确的进行单词的识别
一旦确定识别到的单词之后,需要进行扫描指针的回退,保证单词识别工作的顺利进行
例如: ++,&&,10e2, int a
2. 直接分析法
基本思想:根据读来的第一个字符的种类分别转到各种子程序处理。这些子程序功能就是识别以相应字符开头的各种单词。
方法
①以字母开头的
基本字、标识符、格式说明符,…IF
WHILE
②以小数点开头的
.34 等
③以数字开头的
常数、格式语句、重复说明
WRITE(6,10) X,Y
10 FORMAT(2X, F10.4, F9.3)
3. 状态转换图法
构造一个识别标识符的状态转换图