实验目的 1. 深入理解有限自动机及其应用 2. 掌握根据语言的词法规则构造识别其单词的有限自动机的方法 3.基本掌握词法分析程序的开发
实验内容及要求 1、 词法分析器的功能和输出格式 词法分析器的功能是输入源程序,输出单词符号
词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)
本实验中,采用的是一类符号一种别码的方式
2、 单词的BNF 表示 -> ->|| |ε -> -> |ε -> + -> - -> > -> >= 3、“超前搜索”方法 词法分析时,常常会用到超前搜索方法
如当前待分析字符串为“a>+”,当前字符为’>’,此时,分析器倒底是将其分析为大于关系运算符还是大于等于关系运算符呢
显然,只有知道下一个字符是什么才能下结论
于是分析器读入下一个字符’+’,这时可知应将’>’解释为大于运算符
但此时,超前读了一个字符’+’,所以要回退一个字符,词法分析器才能正常运行
在分析标识符,无符号整数等时也有类似情况
4、模块结构 5
程序思路 这里以开始定义的C 语言子集的源程序作为词法分析程序的输入数据
在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查填适当的信息表
经过词法分析后,源程序缓冲区 扫描一个字符 主函数main() N 输入文件名,判断能否打开文件 Y 缓冲区中是否还有字符 Y 结束 取单词 扫描一个字符 调用 返回 输出 N 字符串(源程序的外部表示)被翻译成具有等长信息的单词串(源程序的内部表示),并产生两个表格:常数表和标识符表,它们分别包含了源程序中的所有常数和所有标识符
定义部分:定义常量、变量、数据结构
初始化:从文件将源程序全部输入到字符缓冲区中
取单词前:去掉多余空白
取单词后:去掉多余空白