- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理课程设计报告
课题名称:
C- 词法扫描器及语法分析器头现
提交文档学生姓名: 刘佳玉
提交文档学生学号: 2012141461134
同组成员名单: 无
指导教师姓名: 张兵
指导教师评阅成绩:
指导教师评阅意见:
提交报告时间:2015 年6月10日
目录
TOC \o 1-5 \h \z \o Current Document 编译原理课程设计报告 1
\o Current Document 1、课程设计目标 2
\o Current Document 2、分析与设计 2
程序结构 2
\o Current Document 程序流程 3
\o Current Document 词法分析 3
\o Current Document 代码结构分析 3
\o Current Document 2.3.2token 定义和类型 3
\o Current Document 2.3.3DNF 分析 4
\o Current Document 语法分析 4
\o Current Document 代码结构分析 4
\o Current Document 节点定义和类型 5
\o Current Document 递归下降语法分析 6
\o Current Document 3、 测试结果 11
\o Current Document 流程 11
\o Current Document 出错情况 13
\o Current Document 4、 总结 13
\o Current Document 收获 13
\o Current Document 特色 14
\o Current Document 不足 14
\o Current Document 5、 程序代码实现 14
\o Current Document 5.1 递归下降源代码 14
\o Current Document 5.2C-文法 65
1、课程设计目标
学生在学习《编译原理》课程过程中,结合各章节的构造编译程序的基本理论,要求用 C或C+语言描 述及上机调试,实现一个 C-Minus 小编译程序(包括词法分析,语法分析等重要子程序) ,使学生将理论与 实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高学生软件开发的能力。 要求:实现 scanner 和 parser 功能
2、分析与设计
程序结构
语法分析采用递归下降方法的程序结构:
本程序采用面向对象的思想编写,使用 C语言实现,程序分为两部分:词法分析(scan)和语法分析
(parse),分别将两个处理阶段写在两个函数中,分别是scan()和parse(),两个函数分别完成词法分析和 语法分析的任务。scan()函数主要的工作是检查注释是否合法、词法分析获取token。parse()函数的主要工 作是根据 scan() 词法分析之后的 token 进行语法分析,生成语法树,最后并输出语法树。
程序流程
递归下降方法的程序流程图
词法分析
代码结构分析
词法分析阶段的代码写在一个函数中 sean()。main函数读取程序数据,将其存储在一个二维数组中, 调用函数 zhushierror() ,确定程序是否存在注释错误,注释的错误主要是注释的符号不匹配。如果不存在 注释错误,则调用 sean() 函数进行词法分析,否则报错。词法分析是对输入的数据一个字符一个字符的分析, 将所分析出来的 token 存储在一个 veetor 数组中,方便后面语法分析时调用。词法分析没有什么错误限制, 基本不会报错。所以在分析的同时,就会将所分析出的 token 输出
2.3.2token 定义和类型
token 结构体定义如下:
struet token//token 结构体
{
Tokentype tokentype;//token 类型
ehar tokenstring[1100];//token 串
int lineno;//token 行号
};
token 类型:
// 定义的 Token的类型(29 种),分别对应于 else、if、int、return、void、while、 //+ 、 - 、 * 、 / 、 、 =、 、 =、 ==、
/////!= 、 =、 ; 、 , 、 (、 ) 、 [ 、 ]、 { 、 }、 num、 id 、错误、结束
typedef enum
{ elsee=1,iff,i ntt,retur nn, voidd,whilee,xiaoyude ngyu,dayude ngyu,de
原创力文档


文档评论(0)