ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:710.15KB ,
资源ID:21298384      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21298384.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理课程设计报告Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理课程设计报告Word格式.docx

1、 2015年 6月15 日1 课程设计目标 1.1实用性分析 系统基本上实现了Cminus的词法分析器和语法分析器的功能,在词法分析阶段,能正确识别词法单元Token,遇到非法字符和不匹配token时能准确定位错误的位置和发生错误的原因。在语法分析部分能由词法分析器的正确输入得到源文件的语法分析树。 1.2 要求 开发环境:Ubuntu 14.04 LTS + eclipse + GCC 运行环境:Win7 / Ubuntu / Windows XP 1.3目标 实现Cminus的词法分析器和语法分析器2 分析与设计 2.1系统设计思想 根据Cminus的语法定义得到正则表达式,转换为NFA后

2、化简为DFA,从而实现语言的词法分析器,使用递归下降程序分析定义和实现语言的文法,实现语言的语法分析器,在词法分析阶段通过DFA定义了简单从错误处理功能,如Token不匹配等错误,可以定位错误发生的位置行数以及错误发生的原因。 2.2程序流程图 否 是 否 是 2.3词法分析 2.3.1 token的类型typedef enum ENDFILE,ERROR, IF,ELSE,INT,RETURN,VOID,WHILE, /关键字 ID,NUM, ASSIGN,EQ,LT,PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,SEMI,BT,LQ,BQ, UEQ,DOU,LZG

3、H,RZGH,LDGH,RDGH,/特殊字符 TokenType; 2.3.2 DFA分析/DFA中的状态 START, / 开始状态 INID, INNUM, DONE, INASSIGN, INCOMMENT, / 注释状态 ZHU, ZZHU StateType; 2.3.3 代码结构分析 2.4 语法分析 2.4.1 节点的定义和类型typedef enum Stmtk,Expk Nodekind;typedef enum IfK,ElseK,IntK,ReturnK,VoidK,WhileK,AssignK,HanK,HanshutiK Stmtkind;typedef enum O

4、pk,Constk,Idk,Vark Expkind;typedef enum Void,Integer,Boolean ExpType;typedef struct treeNode struct treeNode*childMAXCHILDREN; struct treeNode*sibling; int lineno; Nodekind nodekind; union Stmtkind stmt; Expkind exp; kind; union TokenType op; int val; char*name; attr; ExpType type; TreeNode; 2.4.2递归

5、下降语法分析 根据Cminus的语法规则得到BNF如下:program - declaration-listdeclaration-list - declaration-list declaration | declarationdeclaration - var-declaration | fun-declaration var-declaration - type-specifier ID; | type-specifier ID NUM;type-specifier - int | void fun-declaration - type-specifier ID(params) | co

6、mpound-stmtparams - param-list | voidparam-list - param-list , param | paramparam - type-specifier ID | type-specifier IDcompound-stmt - local-declarations statement-listlocal-declarations - local-declarations var-declaration | emptystatement-list - statement-list statement | emptystatement - expres

7、sion-stmt | compound-stmt | selection-stmt | iteration-stmt | return-stmtexpression-stmt - expression ; | ;selection-stmt - if(expression) statement | if(expression) statement else statementiteration-stmt - while(expression) statementreturn-stmt - return; | return expression;expression - var = expre

8、ssion | simple-expressionvar - ID | IDexpressionsimple-expression - additive-expression relop additive-expression | additive-expressionrelop - = | = | = | != additive-expression - additive-expression addop term | termaddop - + | -term - term mulop factor | factormulop - * | /factor - (expression) |

9、var | call | NUMcall - ID(args)args - arg-list | emptyarg-list - arg-list, expression | expression 2.4.3 代码结构分析 1、在globals.h中定义Token类型、语法分析树节点类型、DFA状态和lineno等全局变量。 2、在util.h 和util.c中定义和实现了printToken、newStmtNode、newExpNode、copyString、printSpace、printTree几个工具函数。 3、在scan.h 和 scan.c 中定义和实现了getToken用于进行词

10、法分析。 4、在parse.h 和 parse.c中定义和实现了parse函数以及文法的实现函数。 5、最后再main.c中进行调用和调试。3 程序代码实现 见附件4 测试结果 4.1测试数据选择 测试用例为课本中C-的程序例子: test.cm 4.2 测试结果分析 4.2.1词法分析测试 1. 正确结果: 2.当注释不匹配时,词法分析会报错,如下图所示: 3.当出现非法字符时(C-语言中不可能出现的字符),会报错,如下图所示: 4.2.2 词法分析测试 1.正确结果 2. 当语法分析阶段出现错误时,语法树的生成将会终止。5 总结 5.1收获 通过实现Cminus的词法分析器和语法分析器,掌

11、握了编译原理的理论知识,通过动手实现练习了正则表达式的设计,从正则表达式到NFA再到DFA的转换,理解了BNF文法和文法的二义性的消除。在词法分析过程中掌握了基本的调试功能。 通过语法分析,理解了递归下降分析和LL(1)文法。 在调试过程中体验到了合作的作用,尤其是在debug的时候,能从不同的角度去检查代码可以加快bug的排查。在练习过程中学学习到了工程化开发方法。同时,项目尝试在Ubuntu下完成,更加充分地学习了Linux系统的用法和特色。 5.2特色 1、代码整洁清晰,结构化和规范化,有完整的注释和说明,输出结果完整清晰,便于调试和查看修改。 2、可以选择将输出重定向到其他文件,如使用

12、如下shell命令运行: ./cminus input.cm output #其中output 为可选的输出文件名 3、程序识别文件名,只接收后缀名为.cm 为源文件,可以在输入阶段对源文件进行关联。 5.3不足 1、只实现了基本的功能,不能检查token不匹配以外的更多错误。在语法分析阶段,如果词法分析并没有得到正确的结果,在某些情况下(如注释不匹配)可能会出现出现无限循环,使输出文件一直增大,造成出现卡死。 2、程序的实现参考了书本中的tiny的源码实现,对其中部分不完善和不适用的部分进行了改进,但仍然出现了很多隐藏的bug,所幸的是程序能正常实现功能。 3、由于时间有限,系统只采用了递归下降分析来实现,没有通过多种方法类对比实验结果,可能会出现其他未知的错误。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1