- 1、本文档共81页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
川大编译原理课程设计报告
编译原理课程设计报告
课题名称: C-Minus词法扫描器及语法分析器实现
提交文档学生姓名:
提交文档学生学号:
同组 成 员 名 单: 无
指导 教 师 姓 名: 金 军
指导教师评阅成绩:
指导教师评阅意见:
.
.
提交报告时间:2014年 6月 20日
目录
1 课程设计目标 3
2 分析与设计 3
2.1 程序结构 3
2.2 程序流程 4
3 词法分析 4
3.1 代码结构分析 5
3.2 Token定义 6
3.2.1 Token的定义和类型 6
3.2.2 Token的种别码 6
3.3 DAF分析 7
3.3.1 删除注释DFA 7
3.3.2 词法分析DFA 9
4 语法分析 13
4.1 代码结构分析 13
4.2 分析树节点定义 14
4.2.1 树节点定义和类型 14
4.2.2 各类型节点的描述 15
4.3 递归向下语法分析 16
4.3.1 C-Minus文法 16
4.3.2 递归向下分析过程 16
5 测试结果 33
5.1 流程 33
5.2 词法分析结果 34
5.3 词法分析出错 39
5.4 语法分析结果· 41
5.5 语法分析出错 44
6 创新与总结 45
6.1 程序创新点 45
6.1.1程序报错处理 45
6.1.2语法分析程序优化处理 45
6.1.3函数中数组参数改进 47
6.2 总结 50
7 附录 50
7.1 scanner.h源文件 50
7.2 scanner.cpp源文件 52
7.3 parser.h源文件 61
7.4 parser.cpp源文件 62
1 课程设计目标
结合各章节的构造编译程序的基本理论,用C或C++语言,实现一个 C-Minus 小编译程序(包括词法分析,语法分析等重要子程序)。
本编译器包括以下两个模块:
设计词法分析器:
利用手工实现方法实现,设计各类别单词的状态转换图,并为不同类别的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。功能包括:
将不翻译的注释等符号先滤掉,转换成一个没有注释的程序
能够分离并收集程序中字符串的各个单词,并保存与单词记号相关的信息;
(2)语法分析
利用学习过递归向下的分析方法等,实现对表达式、各种说明语句、控制语句进行语法分析。若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法错误,要求指出出错性质和出错位置(行号)。
2 分析与设计
2.1 程序结构
本节主要分析程序的代码结构和代码工程文件的划分。(程序由两个类组成: Scanner类和Parser类,分别为词法分析和语法分析类。工程分为四个文件:scanner.h、scanner.cpp、parser.h、parser.cpp,分别对应
本程序采用C++语言以面向对象的思想编写,程序分为两部分:词法分析(Scanner)和语法分析(Parser),分别将两个处理阶段封装成Scanner类和Parser类,两个类各司其职,分别完成词法分析和语法分析的任务。Scanner类主要的工作是过滤注释、词法分析获取Token。Parser类的主要工作是根据Scanner类词法分析之后的Token进行语法分析,生成语法树,最后并输出语法树。在处理过程中,Scanner类的对象作为Parser类的一个成员变量,供Parser调用。
本程序myCompiler包含四个文件,其具体功能如下:
2.2 程序流程
在程序中,Scanner类的对象(scanner)作为Parser类中的一个成员变量,配合Parser类进行语法分析。它们的关系是这样的:Parser类的一个成员变量scanner首先对源程序删除注释,然后进行词法分析获取所有Token,并将获取的Token存储在scanner对象的tokenList(vector类型)中。然后Parser类的语法分析程序就根据tokenList中的Token进行语法分析,生成语法树,最后打印语法树。在这流程之间如果出现分析错误,怎输出相应的错误信息。本程序的流程图如下图:
3 词法分析
3.1 代码结构
文档评论(0)