欢迎来到天天文库
浏览记录
ID:58221670
大小:1.26 MB
页数:80页
时间:2020-04-28
《川大编译原理课程设计报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《编译原理课程设计报告》计算机学院计科8班xxxxxxxxxx编译原理课程设计报告课题名称:C-Minus词法扫描器及语法分析器实现提交文档学生姓名:提交文档学生学号:同组成员名单:无指导教师姓名:金军指导教师评阅成绩:指导教师评阅意见:..提交报告时间:2014年6月20日80指导老师:金军老师《编译原理课程设计报告》计算机学院计科8班xxxxxxxxxx目录1课程设计目标32分析与设计32.1程序结构32.2程序流程43词法分析43.1代码结构分析53.2Token定义63.2.1Token的定义和类型63.2.2Token的种别码63.3DAF分析73.3.1删除注释DFA73.3.
2、2词法分析DFA94语法分析134.1代码结构分析134.2分析树节点定义144.2.1树节点定义和类型144.2.2各类型节点的描述154.3递归向下语法分析164.3.1C-Minus文法164.3.2递归向下分析过程165测试结果335.1流程335.2词法分析结果345.3词法分析出错395.4语法分析结果·415.5语法分析出错446创新与总结456.1程序创新点456.1.1程序报错处理456.1.2语法分析程序优化处理456.1.3函数中数组参数改进476.2总结507附录507.1scanner.h源文件507.2scanner.cpp源文件527.3parser.h源文件
3、617.4parser.cpp源文件6280指导老师:金军老师《编译原理课程设计报告》计算机学院计科8班xxxxxxxxxx1课程设计目标结合各章节的构造编译程序的基本理论,用C或C++语言,实现一个C-Minus小编译程序(包括词法分析,语法分析等重要子程序)。本编译器包括以下两个模块:(1)设计词法分析器:利用手工实现方法实现,设计各类别单词的状态转换图,并为不同类别的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。功能包括:l将不翻译的注释等符号先滤掉,转换成一个没有注释的程序l能够分离并收集程序中字符串的各个单词,并保存与单词记号相关的信息;(2)语法分析利用学习过递归
4、向下的分析方法等,实现对表达式、各种说明语句、控制语句进行语法分析。若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法错误,要求指出出错性质和出错位置(行号)。2分析与设计2.1程序结构本节主要分析程序的代码结构和代码工程文件的划分。(程序由两个类组成:Scanner类和Parser类,分别为词法分析和语法分析类。工程分为四个文件:scanner.h、scanner.cpp、parser.h、parser.cpp,分别对应Scanner类和Parser类的声明和实现文件)。本程序采用C++语言以面向对象的思想编写,程序分为两部分:词法分析(Scanner)和语法分析(P
5、arser),分别将两个处理阶段封装成Scanner类和Parser类,两个类各司其职,分别完成词法分析和语法分析的任务。Scanner类主要的工作是过滤注释、词法分析获取Token。Parser80指导老师:金军老师《编译原理课程设计报告》计算机学院计科8班xxxxxxxxxx类的主要工作是根据Scanner类词法分析之后的Token进行语法分析,生成语法树,最后并输出语法树。在处理过程中,Scanner类的对象作为Parser类的一个成员变量,供Parser调用。本程序myCompiler包含四个文件,其具体功能如下:词法分析scanner.h:与词法分析相关的类(Scanner类)的
6、声明scanner.cpp:词法分析阶段类(Scanner类)的实现语法分析parser.h:与语法分析相关的类(Parser类)的声明parser.cpp:语法分析阶段类(Parser类)的实现2.2程序流程在程序中,Scanner类的对象(scanner)作为Parser类中的一个成员变量,配合Parser类进行语法分析。它们的关系是这样的:Parser类的一个成员变量scanner首先对源程序删除注释,然后进行词法分析获取所有Token,并将获取的Token存储在scanner对象的tokenList(vector类型)中。然后Parser类的语法分析程序就根据tokenList中的
7、Token进行语法分析,生成语法树,最后打印语法树。在这流程之间如果出现分析错误,怎输出相应的错误信息。本程序的流程图如下图:80指导老师:金军老师《编译原理课程设计报告》计算机学院计科8班xxxxxxxxxx3词法分析3.1代码结构分析词法分析阶段的代码被封装成一个类——Scanner,scanner.h中主要是Scanner类的声明代码,scanner.cpp中主要是Scanner类的实现代码。Scanner类的代码
此文档下载收益归作者所有