《编译原理课程设计报告简单文法的编译器的设计与实现》由会员分享,可在线阅读,更多相关《编译原理课程设计报告简单文法的编译器的设计与实现(45页珍藏版)》请在金锄头文库上搜索。
1、提供全套毕业论文,各专业都有课 程 设 计 报 告 设计题目:简单文法的编译器的设计与实现班 级:计算机1206组长学号:20123966组长姓名:指导教师:设计时间:2014年12月 摘 要 编译原理是计算机科学与技术专业一门重要的专业课,它具有很强的理论性与实践性,目的是系统地向学生介绍编译系统的结构、工作原理以及编译程序各组成部分的设计原理和实现技术,在计算机本科教学中占有十分重要的地位。计算机语言之所以能由单一的机器语言发展到现今的数千种高级语言,就是因为有了编译技术。编译技术是计算机科学中发展得最迅速、最成熟的一个分支,它集中体现了计算机发展的成果与精华。 本课设是词法分析、语法分析
2、、语义分析的综合,外加上扩展任务中间代码的优化和目标代码的生成,主要是锻炼学生的逻辑思维能力,进一步理解编译原理的方法和步骤。关键词:编译原理,前端,目标代码,后端1 目 录摘要.3 1. 概述.6 2. 课程设计任务及要求.8 2.1 设计任务.8 2.2 设计要求.9 3. 算法及数据结构.10 3.1算法的总体思想.10 3.2 词法分析器模块.11 3.2.1 功能.11 3.2.2 数据结构.11 3.2.3 算法.12 3.3 语法分析器模块.13 3.3.1功能.13 3.3.2 数据结构.13 3.3.3算法.14 3.4 中间代码产生器模块.24 3.4.1 功能.24 3.
3、4.2 数据结构.24 3.4.3 算法.25 3.5 优化器模块.27 3.5.1 功能.27 3.5.2 数据结构.27 3.5.3 算法.283.6 目标代码生成器模块.30 3.6.1功能.30 3.6.2 数据结构.30 3.6.3 算法.31 4. 程序设计与实现.32 4.1 程序流程图.32 4.2 程序说明.33 4.3 实验结果.355. 结论.426. 参考文献.437. 收获、体会和建议.44 1 概述 在计算机上执行一个高级语言程序一般要分为两步;第一步,用一个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。在学习编译原理课程过程中,
4、逐渐掌握各章节构造编译程序的基本理论,并能独立完成词法分析器、语法分析器和语义分析器实验,在基本实验完成的基础上,逐步完成课程设计。针对自己的理解和学习,实现一个小编译器括符号表的构造。 编译程序的工作过程一般可以划分为五个阶段:词法分析、语法分析、语义分析和中间代码产生、优化、目标代码生成。 第一阶段,词法分析。词法分析的任务是:输入源程序,对构成源程序的字符串进行分解和扫描,识别出一个个的单词或符号。我们设计了符号表,包括名字栏和信息栏,其中名字栏作为关键字,根据给定的名字,在符号表中查找其信息。如果该名字在符号表中不存在,则将其加入到符号表中,否则返回指向该名字的指针,从符号表中删除给定
5、名字的表项,并且设计了词法分析器,具体实现为设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。词法分析器具备预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序;,能够拼出语言中的各个单词,将拼出的标识符填入符号表,返回识别单词或符号的种别码和属性值。 第二阶段,语法分析。在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。我们实现了语法分析器,能够使用预测分析法、递归下降分析法、算符优先分析法、SLR分析法实现对表达式、
6、各种说明语句、控制语句进行语法分析。 第三阶段,语义分析和中间代码产生。对语法分析所识别的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。这一阶段包括两个方面的工作。首先,对每种语法范畴进行静态语义检查。如果语义正确,则依循语言的语义规则进行中间代码的翻译。 第四阶段,优化。优化的任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效的目标代码。例如公共子表达式的提取、循环优化、删除无用代码。 第五阶段,目标代码生成,把中间代码变换成特定机器上的低级语言代码,有赖于硬件系统结构和机器指令含义来实现最后的翻译。在能完成指定寄存器个数的情况下将一中间代码程序段翻译成汇编
7、语言目标代码。 通过对编译器的设计实现,一方面再次熟悉了c语言的编程方法及思想,另一方面加深了而对所学编译知识的掌握和理解,也深刻的理解了编译器的思想和实现方法;从词法分析到语法分析,再到语义分析,整个独立而又紧密联系的环节,紧紧相扣,整体的实现理解的更加透彻。不过由于编译程序本身涉及到词法分析、语法分析、代码生成、错误恢复和优化等诸多模块,要在实验中做到面面俱到不太可能,所以本编译器不可避免的会存在各种问题,但作为一个具有基本功能的、可扩充的系统,完全达到了巩固编译原理的理论知识,并将其运用于实践的目的。 2 课程设计任务及要求2.1 设计任务任务内容:定义一个简单程序设计语言文法(包括变量
8、说明语句、算术运算表达式、赋值语句;扩展包括逻辑运算表达式、If语句、While语句等);扫描器设计实现;语法分析器设计实现;中间代码设计;中间代码生成器设计实现;中间代码优化;生成目标代码。 分析完任务内容,我们制定出一套满足老师要求的语句的文法结构,具体内容如下(其中“?”代表空产生式):程序-void main ()函数体函数体-变量声明语句 函数体|赋值语句 函数体|if(表达式)函数体else函数体函数体|while(表达式)函数体 函数体|?变量声明语句-类型 标识符 变量声明语句_1 ;类型-int |char |bool变量声明语句_1-,标识符 变量声明语句_1 |=表达式 变量声明语句_1|?赋值语句-标识符=表达式;表达式-算数表达式 逻辑表达式逻辑表达式- =算数表达式|T E1E1-