编译原理笔记4-词法分析和状态转换图
编译原理笔记4-词法分析和状态转换图
词法分析器
从左到右逐个字符地扫描源程序,产生一个个单词符号。把作为字符的源程序改造为单词符号串组成的中间程序
功能:
- 读入源程序字符串,识别具有独立含义的最小语法单位
- 把单词变成长度统一且为定长的属性字
- 滤掉空格、跳过注释换行符、加工处理等
安排:
- 作为独立的遍
- 作为被语法分析器调用的子程序
词法分析器实现方式
相对独立的方式:
语法分析程序使用getToken接口,获取从词法分析程序的Token,实现一趟编译程序
完全独立的方式:
词法分析程序将源程序转换为属性字序列。
- 简化设计、降低了语法分析的复杂性
- 提高编译效率,增加编译系统的可移植性
词法分析器的输出形式
- 单词:程序语言的基本语法符号
- 基本字:每个基本字当成一个类
- 标识符:当成一类,以内部码值加以区别
- 常数、运算符、界符等
- 词法分析器中单词的输出形式:二元式(单词类别、单词内部码值)
状态转换图
一张有限方向图,结点代表状态,状态之间用箭弧连接,箭弧的标记代表射出结状态下可能出现的输入字符或字符类
状态转换图的实现
每个结点对应一段程序,前面状态结的程序调用其后继结点的程序
引入一下标准过程、变量:
- Char:全程字符变量,存放最新读入的源程序字符
- 字符串Token:存放构成单词符号的字符串
- 过程GETChar:读入一个源程序字符,放入Char中,搜索指针前移
- 过程GETNBC:反复调用GETChar,直到进入下一个非空字符
- 过程CONCAT:把Char中的字符连接到Token的末尾
- 函数Letter/digit:判断Char中是否为字母/数字
- 过程Return(c,val):已经识别一个单词,以二元式返回
- 过程Retract:搜索器指针回拨一个字符
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星辰微光的博客!





