欢迎来到天天文库
浏览记录
ID:13098875
大小:1.64 MB
页数:112页
时间:2018-07-20
《c-词法扫描器及语法分析器实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、课程名称:编译原理课程设计学生姓名:学生学号:《编译原理及实践》课程报告课题名称:C-词法扫描器及语法分析器实现课题负责人名(学号):指导教师:金军老师评阅成绩:评阅意见:提交报告时间:2013年6月13日-111-课程名称:编译原理课程设计学生姓名:学生学号:目录《编译原理及实践》课程报告01课程设计目标12分析与设计12.1程序结构12.1.1语法分析采用递归下降方法的程序结构12.1.2语法分析采用LL(1)方法的程序结构12.2程序流程32.2.1递归下降方法的程序流程图32.2.2LL(1)方法程序流程图43词法分析53.1递归下降方法的词法分析53.1.1代码结
2、构分析53.1.2Token定义63.1.2DNF分析73.2LL(1)方法的词法分析94语法分析94.1递归下降94.1.1代码结构分析94.1.2节点定义104.1.3递归下降语法分析114.2LL(1)语法分析174.2.1代码结构分析174.2.2节点定义184.2.3LL(1)语法分析185测试结果205.1递归下降方法的测试结果205.1.1流程205.1.2出错的情况275.2LL(1)方法测试结果305.2.1流程305.2.2出错的情况336总结356.1收获356.2特色356.3不足357附录357.1递归下降方法源代码357.2LL(1)源文件707
3、.3C-文法110-111-课程名称:编译原理课程设计学生姓名:学生学号:1课程设计目标学生在学习《编译原理》课程过程中,结合各章节的构造编译程序的基本理论,要求用C或C++语言描述及上机调试,实现一个C-Minus小编译程序(包括词法分析,语法分析等重要子程序),使学生将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高学生软件开发的能力。要求:实现scanner和parser功能2分析与设计2.1程序结构2.1.1语法分析采用递归下降方法的程序结构本程序采用面向对象的思想编写,使用C++语言实现,程序分为两部分:词法分析(Scanner)和语法分析(Pa
4、rser),分别将两个处理阶段封装成Scanner类和Parser类,两个类分别完成词法分析和语法分析的任务。Scanner类主要的工作是删除注释、词法分析获取Token。Parser类的主要工作是根据Scanner类词法分析之后的Token进行语法分析,生成语法树,最后并输出语法树。四个文件分别为scanner.h和scanner.cpp以及parser.h和parser.cpp,他们分别是Scanner类声明文件、Scanner类实现文件、Parser类声明文件、Parser类实现文件。2.1.2语法分析采用LL(1)方法的程序结构本程序采用C++语言实现,程序分为两大
5、部分:词法分析(Scanner)和语法分析(Parser),这两个部分分别完成词法分析和语法分析的任务。其中,grammarInit.cpp中定义了C-Minus的文法规则,parseTableInit.cpp中实现了First集和Follow集的构建以及分析表构建的方法。uitl.cpp实现了语法分析输出相关的函数-111-课程名称:编译原理课程设计学生姓名:学生学号:2.2程序流程2.2.1递归下降方法的程序流程图-111-课程名称:编译原理课程设计学生姓名:学生学号:2.2.2LL(1)方法程序流程图-111-课程名称:编译原理课程设计学生姓名:学生学号:3词法分析3
6、.1递归下降方法的词法分析3.1.1代码结构分析词法分析阶段的代码被封装成一个类——Scanner,scanner.h中主要是Scanner类的声明代码,scanner.cpp中主要是Scanner类的实现代码。Scanner类对外提供的函数主要有:getSourseStringFromFile(strings)(从文件中获取待分析的源代码)、deleteComments()(过滤注释)、scan()(词法分析主程序)。词法分析的过程主要是:ØScanner调用getSourseStringFromFile(strings),从文件中获取待分析的源代码ØScanner调用d
7、eleteComments(),将注释过滤掉,如果注释出错,则不进行词法分析ØScanner调用scan(),进行词法分析,将分析得到的所有Token保存在Scanner类的成员变量tokenList中,以备语法阶段调用,并将Token输出到文件Token.txt中。以上三个函数构成了词法分析的骨架,在Scanner类中还有其他成员变量和函数,主要作为这三个函数处理过程的中间步骤,为这三个函数服务。Scanner类的代码结构和主要的成员变量和函数如下图所示:其他函数和成员变量的作用和含义:-111-课程名称:编译原
此文档下载收益归作者所有