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

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

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理课程设计-C-词法器及语法分析器实现

编译原理课程设计报告 课题名称: C-词法扫描器及语法分析器实现 提交文档学生姓名: 提交文档学生学号: 同组 成 员 名 单: 无 指导 教 师 姓 名: 金军 指导教师评阅成绩: 指导教师评阅意见: . . 提交报告时间:2014年 6月 xx日 目录 目录 2 1 课程设计目标 2 2 分析与设计 4 2.1 程序结构 4 3 程序代码实现 9 3.1 代码结构 9 3.2.1 globals.h 9 3.2.2 scan.c 11 3.2.3 parser.c 18 3.4 util.c 30 3.5 test.cpp 36 4 测试结果 38 4.1.给出标准测试程序的词法和语法分析结果: 38 4.1.1 词法分析结果 38 4.1.2 语法分析结果 41 4.2.修改代码后的结果: 42 4.2.1修改 42 5. 本课程设计我的独创工作 44 6.总结 44 1 课程设计目标 学生在学习《编译原理》课程过程中,结合各章节的构造编译程序的基本理论,要求用C或C++语言描述及上机调试,实现一个 C-Minus 小编译程序(包括词法分析,语法分析等重要子程序),使学生将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高学生软件开发的能力。 要求: (1)设计词法分析器 设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。功能包括: a. 具备预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序; b. 能够拼出语言中的各个单词; c. 返回(种别码, 属性值)。 (2)语法分析 要求用学习过的自底向上或自顶向下的分析方法等,实现对表达式、各种说明语句、控制语句进行语法分析。若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法错误,要求指出出错性质和出错位置(行号)。 2 分析与设计 2.1 程序结构 本程序采用C++语言以面向对象的思想编写,程序分为两部分:词法分析(Scanner)和语法分析(Parser)。 扫描程序执行词法分析,并将字符序列收集到token中,并将每一行的Token打印出来。 实现方法:Scanner:手工实现 Parser:递归下降 系统总图: source code Token Syntax Tree 程序流程: 在程序中,词法分析获取所有Token,并将获取的Token存储在scanner对象的tokenString 中。然后Parser类的语法分析程序就根据tokenString中的Token进行语法 分析,生成语法树,最后打印语法树。同时,这也是程序的流程。 扫描器: C-惯用的词法 1、语言的关键字:else if int return void while 2、专用符号:+ - * / = = == != = ; , ( ) [ ] { } /* */ 3、其他标记是ID和NUM,通过下列正则表达式定义: ID = letter letter* NUM = digit digit* letter = a|..|z|A|..|Z digit = 0|..|9 4、空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM关键字。 5. 注释用通常的C语言符号/ * . . . * /围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套。 DFA图如下: 初始状态设置为START,当需要得到下一个token时,取得此token的第一个字符,并且按照DFA与对此字符的类型的分析,转换状态。重复此步骤,直到DONE为止,输出token类型。 参考课本中所给的TINY扫描程序的DFA,C-的DFA不同之处在于注释以及(= =,! = , =, =)的处理:

文档评论(0)

weizhent2017 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档