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

  • 54
  • 0
  • 约6.17万字
  • 约 73页
  • 2017-08-09 发布于安徽
  • 举报

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

编译原理课程设计报告 课题名称: C-词法扫描器及语法分析器实现 提交文档学生姓名: 提交文档学生学号: 同组 成 员 名 单: 无 指导 教 师 姓 名: 指导教师评阅成绩: 指导教师评阅意见: . . 提交报告时间:2012年 6月 16日 目录 1 课程设计目标 3 2 分析与设计 4 2.1 程序结构 4 2.2 程序流程 5 3 词法分析 6 3.1 代码结构分析 6 3.2 Token定义 7 3.2.1 Token的定义和类型 7 3.2.2 Token的种别码 7 3.3 DAF分析 8 3.3.1 删除注释DFA 8 3.3.2 词法分析DFA 10 4 语法分析 14 4.1 代码结构分析 14 4.2 节点定义 15 4.2.1 节点定义和类型 15 4.2.2 各类型节点的描述 16 4.3 递归向下语法分析 16 4.3.1 C-文法 16 4.3.2 递归向下分析过程 17 5 测试结果 34 5.1 流程 34 5.2 词法分析结果 34 5.3 词法分析出错 38 5.4 语法分析结果 39 5.5 语法分析出错 41 6 总结 42 6.1 词法分析编写过程 42 6.2 语法分析编写过程 43 6.3 成果和收获 43 7 附录 44 7.1 scanner.h源文件 44 7.2 scanner.cpp源文件 45 7.3 parser.h源文件 55 7.4 parser.cpp源文件 56 1 课程设计目标 学生在学习《编译原理》课程过程中,结合各章节的构造编译程序的基本理论,要求用C或C++语言描述及上机调试,实现一个 C-Minus 小编译程序(包括词法分析,语法分析等重要子程序),使学生将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高学生软件开发的能力。 要求: (1)设计词法分析器 设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。功能包括: a. 具备预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序; b. 能够拼出语言中的各个单词; c. 返回(种别码, 属性值)。 (2)语法分析 要求用学习过的自底向上或自顶向下的分析方法等,实现对表达式、各种说明语句、控制语句进行语法分析。若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法错误,要求指出出错性质和出错位置(行号)。 2 分析与设计 2.1 程序结构 本节主要分析程序的代码结构和代码工程文件的划分。(程序由两个类组成: Scanner类和Parser类,分别为词法分析和语法分析类。工程分为四个文件:scanner.h、scanner.cpp、parser.h、parser.cpp,分别对应 2.2 程序流程 在程序中,Scanner类的对象(scanner)作为Parser类中的一个成员变量,配合Parser类进行语法分析。它们的关系是这样的:Parser类的一个成员变量scanner首先对源程序删除注释,然后进行词法分析获取所有Token,并将获取的Token存储在scanner对象的tokenList(vector类型)中。然后Parser类的语法分析程序就根据tokenList中的Token进行语法分析,生成语法树,最后打印语法树。同时,这也是程序的流程。 3 词法分析:和backToLastChar()使用(分别自增和自减1),用以指示当前待分析的char在源代码中的位置 bool commentFlag:标注注释开始的标志,为true时表示正在注释体内,即源代码进入/*之后且*/之前的状态 int lineCount:对行号计数,表示当前词法分析在源代码的行位置(每次获取到的char为/n就自增1) bool scanSuccess:词法分析是否成功的标志 string sourseString:获取源代码的字符串 string str:在分析过程中保存Token对应的串 vectorToken tokenList:保存Token序列 //定义的Token结构体,

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档