编译原理课程设计报告-简单文法的编译器的设计与实现.docx
《编译原理课程设计报告-简单文法的编译器的设计与实现.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计报告-简单文法的编译器的设计与实现.docx(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课 程 设 计 报 告设计题目:简单文法的编译器的设计与实现班级:计算机1206组长学号:*组长姓名:指导教师:设计时间:2014年12月11摘 要编译原理是计算机科学与技术专业一门重要的专业课, 它具有很 强的理论性与实践性,目的是系统地向学生介绍编译系统的结构、工作 原理以及编译程序各组成部分的设计原理和实现技术,在计算机本科教 学中占有十分重要的地位。计算机语言之所以能由单一的机器语言发展 到现今的数千种高级语言,就是因为有了编译技术。编译技术是计算机 科学中发展得最迅速、最成熟的一个分支,它集中体现了计算机发展的 成果与精华。本课设是词法分析、语法分析、语义分析的综合,外加上扩展任务
2、中间代码的优化和目标代码的生成,主要是锻炼学生的逻辑思维能力, 进一步理解编译原理的方法和步骤。关键词:编译原理,前端,目标代码,后端目 录摘要31. 概述62. 课程设计任务及要求82.1 设计任务82.2 设计要求93. 算法及数据结构103.1 算法的总体思想103.2 词法分析器模块113.2.1 功能113.2.2 数据结构113.2.3 算法123.3 语法分析器模块133.3.1 功能133.3.2 数据结构133.3.3 算法143.4 中间代码产生器模块243.4.1 功能243.4.2 数据结构243.4.3 算法253.5 优化器模块273.5.1 功能273.5.2 数
3、据结构273.5.3 算法283.6 目标代码生成器模块303.6.1 功能303.6.2 数据结构303.6.3 算法314. 程序设计与实现324.1 程序流程图324.2 程序说明334.3 实验结果355. 结论426. 参考文献437. 收获、体会和建议441 概述在计算机上执行一个高级语言程序一般要分为两步;第一步,用一 个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器 语言程序求得计算结果。在学习编译原理课程过程中,逐渐掌握各 章节构造编译程序的基本理论,并能独立完成词法分析器、语法分析器 和语义分析器实验,在基本实验完成的基础上,逐步完成课程设计。针 对自己的理解
4、和学习,实现一个小编译器括符号表的构造。编译程序的工作过程一般可以划分为五个阶段:词法分析、语法分 析、语义分析和中间代码产生、优化、目标代码生成。第一阶段,词法分析。词法分析的任务是:输入源程序,对构成源 程序的字符串进行分解和扫描,识别出一个个的单词或符号。我们设计 了符号表,包括名字栏和信息栏,其中名字栏作为关键字,根据给定的 名字,在符号表中查找其信息。如果该名字在符号表中不存在,则将其 加入到符号表中,否则返回指向该名字的指针,从符号表中删除给定名 字的表项,并且设计了词法分析器,具体实现为设计各单词的状态转换 图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调 用的子程
5、序。词法分析器具备预处理功能。将不翻译的注释等符号先滤 掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理 子程序;,能够拼出语言中的各个单词,将拼出的标识符填入符号表, 返 回识别单词或符号的种别码和 属性值。第二阶段,语法分析。在词法分析的基础上,根据语言的语法规则, 把单词符号串分解成各类语法单位。通过语法分析,确定整个输入串是 否构成语法上正确的“程序”。我们实现了语法分析器,能够使用预测分析法、递归下降分析法、算符优先分析法、SLR分析法实现对表达式、各 种说明语句、控制语句进行语法分析。第三阶段,语义分析和中间代码产生。对语法分析所识别的各类语 法范畴,分析其含义,并进
6、行初步翻译(产生中间代码)。这一阶段包括 两个方面的工作。首先,对每种语法范畴进行静态语义检查。如果语义 正确,则依循语言的语义规则进行中间代码的翻译。第四阶段,优化。优化的任务在于对前段产生的中间代码进行加工 变换,以期在最后阶段能产生出更为高效的目标代码。例如公共子表达 式的提取、循环优化、删除无用代码。第五阶段,目标代码生成,把中间代码变换成特定机器上的低级语 言代码,有赖于硬件系统结构和机器指令含义来实现最后的翻译。在能 完成指定寄存器个数的情况下将一中间代码程序段翻译成汇编语言目标 代码。通过对编译器的设计实现,一方面再次熟悉了c语言的编程方法及 思想,另一方面加深了而对所学编译知识
7、的掌握和理解,也深刻的理解 了编译器的思想和实现方法;从词法分析到语法分析,再到语义分析, 整个独立而又紧密联系的环节,紧紧相扣,整体的实现理解的更加透彻。 不过由于编译程序本身涉及到词法分析、语法分析、代码生成、错误恢 复和优化等诸多模块,要在实验中做到面面俱到不太可能,所以本编译 器不可避免的会存在各种问题,但作为一个具有基本功能的、可扩充的 系统,完全达到了巩固编译原理的理论知识,并将其运用于实践的目的。2 课程设计任务及要求2.1 设计任务任务内容:定义一个简单程序设计语言文法(包括变量说明语句、 算术运算表达式、赋值语句;扩展包括逻辑运算表达式、If语句、While 语句等);扫描器
8、设计实现;语法分析器设计实现;中间代码设计; 中间代码生成器设计实现;中间代码优化;生成目标代码。分析完任务内容,我们制定出一套满足老师要求的语句的文法结构, 具体内容如下(其中“?”代表空产生式):程序-void main ()函数体函数体-变量声明语句 函数体|赋值语句 函数体|if(表达式)函 数体else函数体函数体|while(表达式)函数体 函数体|?变量声明语句-类型 标识符 变量声明语句_1 ;类型-int |char |bool变量声明语句_1-,标识符 变量声明语句_1 |=表达式 变量声明语 句_1|?赋值语句-标识符=表达式;表达式-算数表达式 逻辑表达式逻辑表达式-
9、=算数表达式|T E1E1-+ T E1|- T E1|?T-F T1T1-* F T1|/ F T1|?F-标识符常数|(E)这个文法满足老师的要求,但是也存在一些不足,比如变量类型中没 有处理实数,数组和结构体以及if语句和while语句后必须有大括弧匹 配。2.2 设计要求1、在深入理解编译原理基本原理的基础上,对于选定的题目,以小 组为单位,先确定设计方案;2、设计系统的数据结构和程序结构,设计每个模块的处理流程。要 求设计合理;3、编程序实现系统,要求实现可视化的运行界面,界面应清楚地反 映出系统的运行结果;4、确定测试方案,选择测试用例,对系统进行测试;5、运行系统并要通过验收,讲
10、解运行结果,说明系统的特色和创新 之处,并回答指导教师的提问;3 算法及数据结构3.1 算法的总体思想词法分析器又称为扫描器,它的任务就是对输入的源程序进行词法分析输出 单词符号供语法分析使用,语法分析器简称分析器,对单词符号串进行语法分析, 根据语法规则进行推导,识别出各类语法单位,最终判断输入串是否构成语法上正 确的“程序”。语义分析与中间代码产生器,按照语义规则对语法分析器推导出的 语法单位进行语义分析并把它们翻译成一定形式的中间代码。优化器就是对中间代 码进行优化处理。目标代码生成器,把中间代码翻译成目标程序。符号表用来登记 源程序中出现的变量及其属性。另外,如果源程序有错误,编译发现
11、错误,把有关 错误信息报告给用户,即出错处理。流程图如下:符号表目标代码3.2 词法分析器模块3.2.1 功能词法分析器功能室输入源程序,输出单词符号。单词符号是一个 程序语言的基本语法符号。程序语言的单词符号一般可分为下列5种。(1)关键字 是由程序语言定义的具有固定亿的标识符。有时称 这些标识符为保留字或基本字。(2)标识符 用来标示各种名字,如变量名,数组名,函数名等。(3)常数 程序中出现用来运算的数值(4)运算符我们所定义的文法包括+,-,*,/算术运算符,还有and,or,not,=,=,=逻辑运算符。(5)界符 程序中用来分割的符号。3.2.2 数据结构一个程序语言的关键字,运算
12、符和界符都是确定的,一般只有几 十个或上百个。而对于标识符或常数的使用都不加限制。词法分析器所 输出的单词符号常常表示为二元式结构:(单词种别,单词符号的属性 值);相应的数据结构处理为如下表示:关键字kchar Definition=, ,(,) , + ,界符表pchar *ID1000;int IdNum=0;/标识符表iint Cons1000;int ConsNumber=0;/算数常量表类码ctypedef struct TokenTypechar code;int value;TokenType;/单词符号的二元式结构3.2.3 算法3.3.3 算法3.3 语法分析器模块3.3.
13、1 功能语法分析是编译过程的核心部分。它的任务是在词法分析识别出单词 符号串的基础上,分析并判定程序的语法结构是否符合语法规则。语法 分析器在编译程序中的地位也是非常重要。语言的语法结构是用上下文无关文法描述的。因此,语法分析器的工 作本质上就是按照文法的产生式,识别输入符号串是否为一个句子。按照语法分析树的建立方法,可以粗略的把语法分析方法分成两类, 一类是自上而下的分析方法,另一类是自下而上的分析方法。在本次的 课程设计中使用的是自上而下的分析方法中的递归下降分析法,用这种 分析法的好处是,直观易懂,便于表示做递归和因子提取。自上而下的分析方法的主旨就是,对任何输入串,试图用一切可能的 办
14、法。从文法开始符号出发,自上而下的为输入串建立一棵语法树。或 者说,为输入串寻找一个最左推导。这种方法本质上就是一种试探过程, 是反复使用不同产生式谋求匹配输入串的过程。3.3.2 数据结构对于语法分析过程而言,其处理的数据是来自于Token序列,是词法 分析的产物。语法分析的任务就是识别和处理比单词更大的语法单位, 比如:程序设计语言中的表达式、各种说明和语句乃至全部程序。所以 这个部分不需要构造新的数据结构,其数据结构是沿用上一部分的数据 结构,在这里就不再列举了,具体数据结构请参见词法分析部分。13主控程序:voidmain()A(w)子程序入口errorerrorNEXT(w)出口DN
15、EXT(w)NEXT(w)NEXT(w)NEXT(w)NEXT(w)B(w)errorerrorerrorerrorB(w)子程序:15error出口生成四元式NEXT(w)19ENDWHILE()为插入的语义动作。ENDWHILE( )B(w)出口C(w)子程序:#D(w)子程序:21IE()errorNEXT(w)其中IE()为if else结构的出口标志233.4 中间代码产生器模块3.4.1 功能中间代码是高级程序语言中,各种语法成分的语义结构表示;它介 于源语言和目标语言之间。虽然源程序可以直接翻译为目标语言代码,但是许多编译程序却采 用了独立于机器的复杂性介于源语言和机器语言之间的
16、中间语言。这样 做的好处是:便于进行与机器无关的代码优化工作;使编译程序改变目 标机更容易;使编译程序的结构在逻辑上更为简单明确,以中间语言为 界面,编译前端和后端的接口更清晰。中间代码的形式有多种,但是在本实验中采用的是四元式形式。3.4.2 数据结构typedef struct QUATchar *operational;/操作符char *figure1;/操作数1char *figure2;/操作数2char *result;/结果QUAT;四元式的存储结构QUAT Quat1000;/四元式结构体数组3.4.3算法25( 开始 I 初始化 NEXET (w)error n#y结果输出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 报告 简单 文法 编译器 设计 实现
限制150内