编译原理课程设计报告(一个完整的编译器)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译原理程序设计报告

一个简单文法的编译器的设计与实现专业班级:计算机1406班

组长姓名:宋世波

组长学号:20143753

指导教师:肖桐

2016年12月

设计分工

组长学号及姓名:宋世波20143753分工:文法及数据结构设计

词法分析

语法分析(LL1)

基于DAG的中间代码优化

部分目标代码生成

组员1学号及姓名:黄润华20143740分工:中间代码生成(LR0)

部分目标代码生成

组员2学号及姓名:孙何奇20143754分工:符号表组织

部分目标代码生成

摘要

编译器是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。

一.编译器的概述

1.编译器的概念

编译器是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。编译器将原始程序作为输入,翻译产生使用目标语言的等价程序。源代码一般为高阶语言如Pascal、C++、Java 等,而目标语言则是汇编语言或目标机器的目标代码,有时也称作机器代码。

2.编译器的种类

编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译

器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高阶语言作为输入,输出也是高阶语言的编译器。例如: 自动并行化编译器经常采用一种高阶语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。

3.本编译器概述

编译程序的工作过程一般可以分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。每一个阶段在功能上是相对独立的,它一方面从上一个阶段获取分析的结果来进行分析,另一方面由将结果传递给下一个阶段。由编译程序的五个阶段就对应了编译系统的结构,这五个对应阶段分为编译器的前段,中间代码以及后端。

其中词法分析器利用超前搜索、状态转换等方法,将源程序转化成为一个一个的单词符号二元式。一般程序语言的单词符号包括关键字、运算符、常数、标识符和界符。语法分析器将这些单词符号作为输入,对它进行语法分析。语法分析采用LL1分析法,语法分析器把语法单元作为输入供语义分析器使用。在语法分析的同时进行语法分析,并产生一定的语义动作,来生成中间代码。优化和目标代码生成是针对某一种处理器而言的。代码优化是将语义分析生成的中间代码进行优化,产生

执行效率更高的代码。目标代码生成最终生成可以在某种机器上运行的机器语言或者汇编语言。还要有符号表可供查询。在整个编译过程中还包括对表格的操作和对错误的处理,这些也都是非常重要的环节。

环境:

编译器整体全部使用visual studio2015编写

目标代码在8086指令集机器上运行

关键词:编译原理,前端,中间代码生成,后端,

目录

设计分工 (2)

摘要 (3)

1. 概述 (7)

2. 课程设计任务及要求 (10)

2.1 设计任务 (10)

2.2 设计要求 (11)

2.3设计的文法结构 (12)

3. 算法及数据结构 (20)

3.1 算法的总体思想(流程) (20)

3.2 词法分析器模块 (22)

3.2.1 功能 (22)

3.2.2 数据结构 (23)

3.2.3 流程图 (24)

3.2.4 算法 (25)

3.2.5 运行截图 (28)

3.3 语法分析器模块 (28)

3.3.1 功能 (28)

3.3.2 数据结构 (30)

3.3.3 流程图 (31)

3.3.4 算法 (32)

3.3.5 运行截图 (44)

3.4符号表生成模块 (45)

3.4.1 功能 (45)

3.4.2 数据结构 (47)

3.4.3 流程图 (50)

3.4.4 算法 (51)

3.4.5 运行截图 (52)

3.5中间代码生成模块 (53)

3.5.1 功能 (53)

3.5.2 数据结构 (54)

3.5.3 流程图 (57)

3.5.4 算法 (58)

3.5.5 运行截图 (59)

3.6中间代码优化模块 (59)

3.6.1 功能 (59)

3.6.2 数据结构 (60)

3.6.3 流程图 (62)

3.6.4 算法 (63)

3.6.5运行截图 (66)

3.7目标代码生成模块 (67)

3.7.1 功能 (67)

3.7.2 数据结构 (68)

3.7.3 流程图 (68)

3.7.4 算法 (69)

3.7.5 运行截图 (73)

这里不得不提到目标代码生成中存在的一些问题, (73)

4. 程序设计与实现 (77)

4.1 程序说明 (77)

4.2 实验结果 (81)

5. 结论 (83)

5.1组长:宋世波 (83)

5.2组员:孙何奇 (85)

5.3组员:黄润华 (85)

6. 收获、体会和建议。 (87)

6.1组长:宋世波 (87)

6.2组员:孙何奇 (88)

6.3组员:黄润华 (89)

7.附录 (90)

源代码: (90)

7.1可执行文件链接 (90)

8、参考文献 (91)

1. 概述

本程序实现的数据类型有整型(int)、浮点型(float)、char(字符型)、字符串型(string),同时在最后的目标代码生成部分允许出现布尔(bool)类型,实现的操作有if,else以及while循环,和输入输出语句,能做到直接生成目标代码并运行。做到了类型检查和重定义的判断,同时也有优化部分。

词法分析部分构建得到的词法序列为二元式,二元式由两部分组成,其种别码和类型组成,其中关键字和界符记录其数字,用到时只需查其

相关文档
最新文档