1、 毕业设计(论文)任务书 第 1 页 毕业设计(论文)题目: C 语言编译器设计与实现 毕业设计(论文)要求及原始数据(资料) : 1C 语言简介和国内外编译器技术研究现状; 2深入了解编译器前端,包括词法分析,语法分析, 语义分析; 3熟练掌握 C 语言语法及语法特点; 4深入分析编译器编写语言(C+) ; 5设计并实现编译过程中各个子过程,词法分析,语法分析,语义分析; 6训练检索文献资料和利用文献资料的能力; 7训练撰写技术文档与学位论文的能力。 第 2 页 毕业设计(论文)主要内容: 1C 语言简介和国内外编译器技术研究现状; 2深入了解编译器前端,包括词法分析,语法分析, 语义分析;
2、 3熟练掌握 C 语言语法及语法特点; 4深入分析编译器编写语言(C+) ; 5设计并实现编译过程中各个子过程,词法分析,语法分析,语义分析; 6训练检索文献资料和利用文献资料的能力; 7训练撰写技术文档与学位论文的能力。 学生应交出的设计文件(论文) : 1内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文; 2包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材 料。 第 3 页 主要参考文献(资料) : 1 KennethAReek.C 和指针.人民邮电出版社, 2008 2 Brian W.Kernighan,Dennis M.Richie. The C Program
3、Language., 2004 3 Richard Stevens. UNIX 环境高级编程. 人民邮电出版社,2006 4 布莱恩特,奥哈拉伦. 深入理解计算机系统.机械工业出版社,2011 5 Stanley B. Lippman 等. C+ Primer. 人民邮电出版社, 2008 6 Alfred V.Aho 等. 编译原理技术和工具.机械工业出版社,2003 7 Andrew W.Appel 等. 现代编译原理-C 语义描述.人民邮电出版社.2006 8 Steven S.Muchnick. 高级编译器设计与实现.机械工业出版社.2005 9 严蔚敏,吴伟民.数据结构.2012 1
4、0 高一凡.面向对象的 C+数据结构.清华大学出版社.2011 11 Thomas H.Cormen, Introduction to Algorithmsm.2012 12 Portland.Lex 其它 数 (1 个或更多的数字序列) 标识符 (1 个或更多的字母序列) 表 4-2C 语言的记号 除了上表的记号之外,C 语言的源程序还要遵循以下的词法规则:代码应是自由书 写格式;空白符由空格、制表位和新行组成。 根据对语言中各类单词某种描述的定义,用手工方式构造词法分析程序。 词法分析程序的主要任务就是扫描程序、识别单词、转换并输出属性字。下面给出 单独成趟词法分析控制流程图。 Y 形成T
5、oken字 选择识别的单词 是否文件结尾 进入主控模块 输入 C 源文件 开 始 N Y 停 止 16 图 4-1 单独成趟的词法分析控制流程图 词法分析主要包含在 Scanner.h和 Scanner.cpp 文件中,其核心函数是 scan( ),它每 次从第一个非空格或换行符开始识别, 直到遇到空格或者换行符, 遇到单行注释就跳过 本行从“/”开始的以后字符识别,遇到多行注释就跳过直到遇到“*/”为止(不支持注释 嵌套) 。每次返回一个识别的单词,遇到不识别的单词就报错,输出不识别的单词和该 单词的行数。 扫描程序在识别出每个记号的同时,还会计算出该记号的特性(比如串值)这五类单词将用 不
6、同的方法处理。关键字、算符与界符将直接形成 Token字;标识符将插入符号表后形 成 Token字,数字将插入常数表后形成 Token字。 Token是本实验的所有类的基类,有 2 个成员变量:Tag,Value。Value 是文法中非 终结符,而 Tag是 Value 对应的唯一标记。 4.1.3 关键字与标识符的识别 C 对于关键字的识别,是通过先将它们看作是标识符,然后再调用 Token 类的 get_int()方法,根据返回值 Tag是否 22(标示符的标志)为来判断是标示符还是关键字。 4.1.4 词法识别具体实现 /分析一个单词,并返回单词的 Token字 Token Scanner:scan() int i=0; string s; static char prev_c = 0; char lineToken:NAME_SIZE = 0; prev_c = c; while (true) if (fin.get(c)=NULL) /到文件