资源描述:
《编译原理课程设计--利用词法自动生成实现词法扫描器》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、武汉理工大学《编译原理》课程设计目录0引言21设计原则22需求分析22.1词法扫描器的功能22.2符号表32.3需求描述33总体设计33.1正规式43.2由正规式构造NFA43.3将NFA转化为DFA53.4DFA的最小化63.5LEX编译系统73.6LEX源程序74数据结构84.1定义正则表达式84.2构造DFA图94.3符号表95详细设计105.1设计中包含的文件105.2scaner.l源程序105.3操作步骤166软件测试与结果166.1程序调试166.2软件测试166.2.1软件环境176.2.2功能测试176.3实验结果1
2、77心得体会208结束语209参考文献2120武汉理工大学《编译原理》课程设计利用词法自动生成实现词法扫描器0引言计算机系统与人信息交换界面多数是应用高级语言来实现。一个高级语言程序的实现,必须依赖于相应的编译系统。所谓编译程序就是指能够把某一种语言程序转换成另一种与之等价的语言程序。它通常包括五个阶段:词法分析,语法分析,语义分析与中间代码的生成,代码优化,目标代码生成。词法分析是完成计算机翻译过程的关键阶段,是整个编译系统的基础。词法扫描器是从基于正规式的描述来构造词法分析器,并且广泛用于描述各种语言的词法分析器。可以用词法扫描器
3、来依次扫描源程序中字符串形式的各个字符,根据语言的词法规则逐个识别出各类单词符号,并以二元组的形式输出。但是,词法扫描器的手工编写较为麻烦,LEX编译系统却可以实现词法扫描器的自动产生。LEX的工作原理是将源程序中的正规式转换成相应的DFA,而相应的动作则插入到输出的词法分析器中适当的地方,控制流由该DFA的解释器掌握,不同的源程序,这个解释器是相同的。对于任何一种高级语言,若要构造它的词法分析程序,只须用LEX源程序来描述该语言的词法,LEX编译系统对LEX源程序处理之后,便可产生出这种高级语言的词法分析程序。所以,依赖于LEX编译
4、系统便可以实现词法分析程序的自动产生,具有比手工运算、构造所无法比拟的优点,例如:运算速度快、准确性高等,从而极大地提高词法分析器的效率。1设计原则在编译程序工作的五个阶段中,每个阶段都必须遵从功能等价的原则。词法规则与语法分析阶段依据的语法规则一同构成了一个语言的语法,而语法则是从"形"的角度衡量一个程序是否合法。所以在词法分析阶段,词法规则成为重要的研究对象。词法分析器所处理的对象即词法分析程序的输入数据,实际上是源程序经过编译预处理,去掉多余的符号后而形成的代码,这样给词法分析带来方便。词法分析的过程是线性的,从头至尾扫描一遍,
5、复杂度较低,易实现。2需求分析2.1词法扫描器的功能20武汉理工大学《编译原理》课程设计词法分析器的输入是源程序,可以看作是特定语言所允许的基本字符流。这些符号在多数高级程序语言中分成了五种单词记号:关键字,标识符,运算符,常量,分界符。词法分析器的基本功能是,按照语言的定义规则,逐个的读入源程序的符号,识别出对语言有意义的符号串,即单词符号,以便编译的后续阶段使用。词法分析程输出结果是组成语言的基本元素即单词,在实际处理的时候,输出并非单词,而是每个单词对应的二元式,形为(单词种别,单自身值)的二元组。单词的种别是语法分析需要的信息
6、,而单词自身值则是编译的语义分析和代码生成等阶段需要的信息。2.2符号表符号表记录了程序中所有的单词符号的信息,包括单词符号和种别编码。每当词法分析器识别了一个单词的时候,第一项工作就是查询符号表。对于不同的单词种别,查询的方式和随后的处理完全不同。例如,对于关键字,分界符和运算符等,只需在各自的符号表中查询,获得并记录其属性值,生成相应的单词二元组。而处理常量,特别是处理标识符要复杂得多,仅仅在词法分析阶段是无法获得一个标识符的所有信息的。2.3需求描述设计实现词法扫描器需要完成的任务是:(1)新建文本文档,输入源程序并保存;(2)
7、定义目标语言的可用符号表和构词规则,编写代码,编译源程序,无错误后运行使其对源程序进行词法扫描;(3)识别单词时,删除无用的空白字符,回车字符以及其他非实质性字符。(4)对于源程序中的注释能够正确识别,但是不要求输出,只是能够统计注释行的总行数并输出即可。(5)依次扫描源程序中字符串形式的各个字符,根据符号表逐个识别出各类单词符号,并以二元组的形式输出单词,输出形式为(单词种别码,单词符号),并对每行的单词数进行统计,直到源程序结束;(6)进行词法检查,对于无法识别的错误,会及时进行报错,并显示错误所在的行数;(7)统计源程序的总行数
8、、注释行数、代码行数和单词数。3总体设计20武汉理工大学《编译原理》课程设计3.1正规式正规式是描述程序语言单词的表达式,对于字母∑,其上的正规式及其表示的正规集可以递归定义如下:①ε是一个正规式,它表示集合L(ε)={