编译原理课程设计

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

课程设计报告

设计题目:一个简单文法编译器的设计与实现

班级:计算机1302

组长学号:********

组长姓名:高思坦

指导教师:肖桐

设计时间:2015年12月

设计分工

组长学号及姓名:20133823 高思坦分工:目标代码生成

组员1学号及姓名:20133826 李北分工:语法分析、中间代码生成

组员2学号及姓名:20133822 方秋生分工:词法分析翻译器

组员3学号及姓名:20133839 吴永琪分工:词法分析识别器

组员4学号及姓名:20133832 刘向甲分工:符号表管理

摘要

现代计算机的程序很多都是用高级语言编写的,而这些高级语言计算机是无法识别的,因此需要将它们转变成计算机能识别的语言,此时就需要借助到编译程序。编译程序是一种翻译程序,它特指把某种高级语言(如C、Java、Pascal)翻译成具体计算机上的低级程序设计语言。编译程序是计算机系统软件最主要的组成部分之,也是用户最直接关系的工具之一。

一个编译程序的可以划分为前端和后端。前端包括词法分析、语法分析、语义分析与中间代码生成三个阶段,后端包括优化、目标代码生成两个阶段,另外还有符号表的管理和错误处理贯穿整个过程。一个编译程序,既可以一个阶段一个阶段地对源程序进行分析,也可以前端只对源程序进行一遍分析,后端也只进行一遍分析。

本课设实现了对C语言中的一部分功能的编译,包括算术逻辑表达式、if语句、while语句以及一维数组等。前端对源程序扫描一遍实现词法分析、语法分析、语义分析与中间代码生成三个阶段,后端进行目标代码生成,整个过程穿插符号表管理和错误处理。

关键词:编译程序,前端,后端

目录

摘要.......................................................I

1 概述 (1)

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

2.1 设计任务 (2)

2.2 设计要求 (2)

3 算法与数据结构 (3)

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

3.2词法分析识别器模块 (4)

3.2.1 功能 (4)

3.2.2 数据结构 (5)

3.2.3 算法 (9)

3.3 语法分析模块 (11)

3.3.1 功能 (11)

3.3.2 数据结构 (12)

3.3.3 算法 (16)

3.4 语义分析和中间代码生成模块 (30)

3.4.1 功能 (30)

3.4.2 数据结构 (31)

3.4.3 算法 (33)

3.5 符号表模块 (41)

3.5.1 功能 (41)

3.5.2 数据结构 (41)

3.5.3 算法 (43)

3.6 目标代码生成模块 (43)

3.6.1 功能 (43)

3.6.2 数据结构 (44)

3.6.3 算法 (45)

4 程序设计与实现 (47)

4.1 程序流程图 (47)

4.2 程序说明 (47)

4.3 实验结果 (50)

5 结论 (61)

6 参考文献 (62)

7 收获、体会和建议 (62)

1 概述

在计算机上执行一个高级语言程序一般要分为两步;第一步,把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。编译程序就是将高级语言程序翻译成机器语言程序或汇编语言程序的工具。工作过程一般可以划分为五个阶段:词法分析、语法分析、语义分析和中间代码生成、优化、目标代码生成。前端包含词法分析、语法分析、语义分析和中间代码生成三个阶段,后端包含优化、目标代码生成两个阶段。

词法分析的任务是对构成源程序的字符串进行分解和扫描,识别出一个个Token序列,并标上类别码以区分关键字、标识符、常数、变量、数组界符等。词法分析器用自动机实现,每读入一个字符,就进行状态转移,当转移到终止状态的时候一个Token就识别出来了。此外,词法分析还要进行常数处理、关键字和标识符的区分操作。

语法分析在词法分析的基础上,根据语言的语法规则,确定整个输入串在语法上是否是正确的。分析方法有递归下降子程序分析法、LL(1)分析法、LR(0)分析法、简单优先分析法等。

在语义分析和中间代码生成这一过程中,对语法分析所识别的各类语法范畴,要分析其含义,并以四元式的形式产生中间代码。

优化的任务在于对中间代码进行加工变换以产生出更为高效的目标代码,主要进行常数合并、公共子表达式节省、删除无用赋值、循环优化等操作。

目标代码生成的任务是把中间代码变换成特定机器上的低级语言代码,这一步需要考虑硬件系统结构、机器指令以及寄存器个数等情况,

将一中间代码程序段翻译成汇编语言或机器语言目标代码。

此外,在这五个阶段当中,符号表的管理、错误处理要穿插在当中进行。

本次课设将前端的三个阶段整合到一起,通过对输入的源程序扫描一遍的方式实现,入口为语法分析,使用递归下降子程序分析法。将词法分析器作为语法分析的子程序,当语法分析需要用到Token时,调用词法分析器识别出一个Token串,同时在语法分析的过程中插入语义动作,每识别完一定的Token串就能生成四元式。在后端则直接根据四元式生成目标代码。符号表用于存储变量以及检查是否有重定义、未定义的变量。在错误处理中,一旦发现错误,就进行输出并立即停止编译过程。

2 课程设计任务及要求

2.1 设计任务

定义一个简单程序设计语言文法(包括变量说明语句、算术运算表达式、赋值语句;扩展包括逻辑运算表达式、If语句、While语句等);

扫描器设计实现;

语法分析器设计实现;

中间代码设计;

中间代码生成器设计实现;

目标代码生成。

2.2 设计要求

1、在深入理解编译原理基本原理的基础上,对于选定的题目,以小组为单位,先确定设计方案;

相关文档
最新文档