实验一词法分析程序实现
一、实验目的与要求
通过编写和调试一个词法分析程序掌握在对程序设计语言的源程序进行扫描的过程中将字符流形式的源程序转化为一个由各类单词符号组成的流的词法分析方法
二、实验内容
基本实验题目若某一程序设计语言中的单词包括五个关键字begi
、e
d、if、the
、else标识符无符号常数六种关系运算符一个赋值符和四个算术运算符试构造能识别这些单词的词法分析程序各类单词的分类码参见表I。
表I语言中的各类单词符号及其分类码表
f输入由符合和不符合所规定的单词类别结构的各类单词组成的源程序文件。
输出把所识别出的每一单词均按形如CLASSVALUE的二元式形式输出并将结果放到某个文件中。对于标识符和无符号常数CLASS字段为相应的类别码的助记符VALUE字段则是该标识符、常数的具体值对于关键字和运算符采用一词一类的编码形式仅需在二元式的CLASS字段上放置相应单词的类别码的助记符VALUE字段则为“空”。
三、实现方法与环境
词法分析是编译程序的第一个处理阶段可以通过两种途径来构造词法分析程序。其一是根据对语言中各类单词的某种描述或定义如BNF用手工的方式例如可用C语言构造词法分析程序。一般地可以根据文法或状态转换图构造相应的状态矩阵该状态矩阵连同控制程序一起便组成了编译器的词法分析程序也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序的另外一种途径是所谓的词法分析程序的自动生成即首先用正规式对语言中的各类单词符号进行词型描述并分别指出在识别单词时词法分析程序所应进行的语义处理工作然后由一个所谓词法分析程序的构造程序对上述信息进行加工。如美国BELL实验室研制的LEX就是一个被广泛使用的词法分析程序的自动生成工具。
处理过程简述在一个程序设计语言中一般都含有若干类单词符号为此可首先为每类单词建立一张状态转换图然后将这些状态转换图合并成一张统一的状态图即得到了一个有限自动机再进行必要的确定化和状态数最小化处理最后添加当进行状态转移时所需执行的语义动作就可以据此构造词法分析程序了。
为了使词法分析程序结构比较清晰且尽量避免某些枝节问题的纠缠我们假定要编译的语言中全部关键字都是保留字程序员不得将它们作为源程序中的标识符在源程序的输入文本中关键字、标识符、无符号常数之间若未出现关系和算术运算符以及赋值符则至少须用一个空白字符加以分隔。作了这些限制以后就可以把关键字和标识符的识别统一进行处理。即每当开r