您好,欢迎访问三七文档
编译原理课程设计报告课题名称:C-词法扫描器及语法分析器实现提交文档学生姓名:XXX提交文档学生学号:0943041XXX同组成员名单:无指导教师姓名:张兵指导教师评阅成绩:指导教师评阅意见:..提交报告时间:2012年6月2日《编译原理课程设计报告》计算机学院计科x班xxx094304xxxx指导老师:张兵老师2目录1课程设计目标............................................................................32分析与设计..............................................................................42.1程序结构..........................................................................42.2程序流程..........................................................................53词法分析................................................................................63.1代码结构分析......................................................................63.2Token定义........................................................................73.2.1Token的定义和类型..........................................................73.2.2Token的种别码..............................................................73.3DAF分析...........................................................................83.3.1删除注释DFA................................................................83.3.2词法分析DFA...............................................................104语法分析...............................................................................144.1代码结构分析.....................................................................144.2节点定义.........................................................................154.2.1节点定义和类型..............................................................154.2.2各类型节点的描述............................................................164.3递归向下语法分析.................................................................164.3.1C-文法.....................................................................164.3.2递归向下分析过程............................................................175测试结果...............................................................................345.1流程.............................................................................345.2词法分析结果.....................................................................345.3词法分析出错.....................................................................385.4语法分析结果.....................................................................395.5语法分析出错.....................................................................416总结...................................................................................426.1词法分析编写过程.................................................................426.2语法分析编写过程.................................................................436.3成果和收获.......................................................................437附录...................................................................................447.1scanner.h源文件................................................................447.2scanner.cpp源文件..............................................................457.3parser.h源文件.................................................................547.4parser.cpp源文件...............................................................56《编译原理课程设计报告》计算机学院计科x班xxx094304xxxx指导老师:张兵老师31课程设计目标学生在学习《编译原理》课程过程中,结合各章节的构造编译程序的基本理论,要求用C或C++语言描述及上机调试,实现一个C-Minus小编译程序(包括词法分析,语法分析等重要子程序),使学生将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高学生软件开发的能力。要求:(1)设计词法分析器设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。功能包括:a.具备预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序;b.能够拼出语言中的各个单词;c.返回(种别码,属性值)。(2)语法分析要求用学习过的自底向上或自顶向下的分析方法等,实现对表达式、各种说明语句、控制语句进行语法分析。若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法错误,要求指出出错性质和出错位置(行号)。《编译原理课程设计报告》计算机学院计科x班xxx094304xxxx指导老师:张兵老师42分析与设计2.1程序结构本节主要分析程序的代码结构和代码工程文件的划分。(程序由两个类组成:Scanner类和Parser类,分别为词法分析和语法分析类。工程分为四个文件:scanner.h、scanner.cpp、parser.h、parser.cpp,分别对应Scanner类和Parser类的声明和实现文件)。本程序采用C++语言以面向对象的思想编写,程序分为两部分:词法分析(Scanner)和语法分析(Parser),分别将两个处理阶段封装成Scanner类和Parser类,两个类各司其职,分别完成词法分析和语法分析的任务。Scanner类主要的工作是过滤注释、词法分析获取Token。Parser类的主要工作是根据Scanner类词法分析之后的Token进行语法分析,生成语法树,最后并输出语法树。在处理过程中,Scanner类的对象作为Parser类的一个成员变量,配合Parser类进行语法分析。工程文件总体上是按照两个类的格局分为四个文件,分别是两个类的声明文件和实现文件。四个文件分别为scanner.h和scanner.cpp以及parser.h和parser.cpp,他们分别是Scanner类声明文件、Scanner类实现文件、Parser类声明文件、Parser类实现文件。词法分析scanner.h:与词法分析相关的类(Scanner类)的声明scanner.cpp:词法分析阶段类(Scanner类)的实现语法分析parser.h:与语法分析相关的类(Parser类)的声明parser.cpp:语法分析阶段类(Parser类)的实现《编译原理课程设计报告》计算机学院计科x班xxx094304xxxx指导老师:张兵老师52.2程序流程在程序中,Scanner类的对象(scanner)作为Parser类中的一个成员变量,配合Parser类进行语法分析。它们的关系是这样的:Parser类的一个成员变量scanner首先对源程序删除注释,然后进行词法分析获取所有Token,并将获取的Token存储在scanner对象的tokenList(vector类型)中。然后Parser类的语法分析程序就根据tokenList中的Token进行语法分析,生成语法树,最后打印语法树。同时,这也是程序的流程。整体程序流程图开始删除注释出错词法分析TF结束语法分析出错出错输出出错信息TFFT从文件获取源代码《编译原理课程设计报告》计算机学院计科x班xxx094304xxxx指导老师:张兵老师63词法分析3.1代码结构分析词法分析阶段的代码被封装成一个类——Scanner,scanner.h中主要是Scanner类的声明代码,scanner.cpp中主要是Scanner类的实现代码。Scanner类对外提供的函数主要有:getSourseStringFromFile(strings)(从文件中获取待分析的源代码)、deleteComments()(过滤注释)、scan()(词法分析主程序)。词法分析的过程主要是:Scanner调用getSourseStringFromFile(strings),从文件中获取待分析的源代码Scanner调用deleteComments(),将注释过滤掉,如果注释出错,则不进行词法分析Scanner调用scan(),进行词法分析,将分析得到的所有Token保存在Scanner类的成员变量tokenList中,以备语法阶段调用,并将Token输出到文件Token.txt中以上三个函数构成了词法分析的骨架,在Scanner类中还有其他成员变量和函数,主要作为
本文标题:四川大学计算机学院-C-语言编译器-编译原理课程设计报告内附源码-递归下降-c-minus
链接地址:https://www.777doc.com/doc-5042416 .html