编译原理课程设计--C-编译器词法分析与语法分析的实现.docVIP

编译原理课程设计--C-编译器词法分析与语法分析的实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理课程设计--C-编译器词法分析与语法分析的实现

编译原理课程设计报告 课题名称: C-编译器词法分析与语法分析的实现 提交文档学生姓名: 黄臻旸 提交文档学生学号: 1043041227 同组 成 员 名 单: 无 指导 教 师 姓 名: 金军 指导教师评阅成绩: 指导教师评阅意见: . . 提交报告时间:2013年 6 月 5 日 编译原理课程设计报告 1 1、课程设计目标 3 2、分析与设计 3 2.1、说明所用的方法: 3 2.2、系统总图: 3 2.2.1、scanner部分: 3 2.2.2、parse部分: 5 2.2.3、代码设计说明 7 3、程序代码实现 10 3.1、获取输入部分(在main.c中): 10 3.2、词法分析部分(在scan.c中): 10 3.3、语法分析部分(在parse.c中): 15 3.4、输出与结点的建立(在util.c中) 29 3.5、TokenType、treeNode与结点类型的声明(在globals.h中) 34 4、测试结果 36 5、总结 36 5.1、收获 36 5.2、不足 36 1、课程设计目标 本次实验,本C- 编译器主要设计并且实现了C- 编译器的词法分析功能与语法分析功能。 2、分析与设计 2.1、说明所用的方法: 各部分的实现方法(scanner:手工实现、Lex;parser:递归下降、LL(1)、LR(0)、SLR(1)、LR(1)、LALR(1)、Yacc),所用编程语言 实现内容 所用的实验方法 所用编程语言 scanner 手工实现 C语言 parse 递归下降 C语言 2.2、系统总图: 2.2.1、scanner部分: 、实验原理: 扫描程序的任务是从源代码中读取字符并形成由编译器的以后部分(通常是分析程序)处理的逻辑单元。由扫描程序生成的逻辑单元称作记号(token),将字符组合成记号与在一个英语句子中将字母将字母构成单词并确定单次的含义很相像。 在此程序中,我将记号分成了以下类型: typedef enum {//按照书上附录B程序布局,放在globals.h中 ENDFILE,ERROR, IF,ELSE,INT,RETURN,VOID,WHILE, ID,NUM, ASSIGN,PLUS,MINUS,TIMES,OVER,LT,LET,BT,BET,EQ,NEQ, // = + - * / = = == != LPAREN_1,RPAREN_1,SEMI,COM,LPAREN_2,RPAREN_2,LPAREN_3,RPAREN_3,LIN,RIN // { } ; , [ ] ( ) /* } TokenType; 其中,关键字有:else、if、int、return、void、while; 专用符号有:+、-、*、/、、=、、=、==、~=、=、;、,、(、)、[、]、{、}、/*、*/ 其他标记是ID、NUM,通过下列正则表达式定义: ID = letter letter* NUM = digit digit* letter = a|..|z|A|..|Z digit = 0|..|9 小写大写字母是有区别的。 空格由空白、换行符和制表符组成。空格通常被忽略,除了他必须分开ID、NUM关键字。 注释常用通常的C语言符号/*...*/围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套。 、实验方法: 我通过对scanner部分原理的了解,确定了他的NFA,再将NFA转化成DFA,并且将状态数最小化。最后根据我所得的DFA与课后TINY的示例程序编写scanner.c。 最

文档评论(0)

skvdnd51 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档