文章目录
第一节 词法分析概述
1.1 词法分析的功能
扫描源程序的字符串,按照词法规则,识别出单词作为输出;对识别过程中发现的错误,输出有关的错误信息。
1.2 词法分析与语法分析的交互方式
-
词法分析器作为单独的一遍
这种方式需要一种数据结构去存放所有的单词
-
词法分析器作为子程序
词法分析器被语法分析器调用
第二节 单词的类别
2.1 标识符
由用户定义
用来对程序中出现的变量、函数、过程、标号等。
不同语言的标识符有不同的规则
2.2 关键字
也称保留字,由语言定义
具有特殊的含义
int, if, else…
2.3 常数
整型常数、实型常数、字符型常数、布尔型常数
2.4 运算符
算术运算符、逻辑运算符、关系运算符、赋值运算符
2.5 界符
在程序中起到分界的作用
; {} () ,
第三节 单词的识别
根据各类单词的特征,从输入字符串中识别出单词,并把这些单词输出
3.1 状态转换图
结点:状态(唯一初态,若干终态)
有向边:状态转换关系
标记:状态转换的条件(读入的字符)
3.2 状态转换图识别的字符串
从初态出发到某一终态,所经过路径上的所有字符的连接。
3.3 识别单词的状态转换圈
根据构成单词的特点,可构造出识别该单词的状态转换圈
在某些情况下,为例识别出某个单词,需要读取的字符可能超出了该单词本身的范围,称为超前搜索,在状态转换图中用带*
的结点表示。识别完后应将这些字符退还给输入串,以备识别下一个单词使用。
3.4 单词的输出
-
单词的输出形式
二元式 即(单词的编码,单词的属性) -
单词的编码
用于区分单词的类别,不同类别的单词采用不同的编码方式 -
单词的属性
用于区分相同编码的不同单词
标识符:(统一一个编码,该标识符在符号表中的位置)
常数:统一一个编码,该常数在常数表中的位置)
关键字:(一字一码,省略)
运算符:(一字一码,省略)
界符:(一字一码,省略)
- 实例
第四节 词法分析器实例
4.1 确定单词的特征
4.2 对单词进行编码
4.3 设计状态转换图
4.4 实现词法分析器
-
初态
-
标记
-
分支
-
循环—while语句
-
终态—单词输出