开发工具:
文件大小: 504kb
下载次数: 0
上传时间: 2019-03-02
详细说明:完整的规划设计、和系统分析、深入分析开发需求,设计模块、类等。联入式系统及应用课后作业
第一章:引言及编译器工作原理简介
1.1编译器简介
人类相互之间通过语言进行交流,人与计算机之间也通过语言进
行交流。编译原理所讨论的问题,就是如何把符合人类思维方式的
用文字描述的意凨(源程序)翻译成计算机能够理解和执行的形式(目
标程序)具体实现从源程序到目标程序转换的程序被称为编译程序或
编译器。
由丁应用的不同,有着各种各样面向人类的高级语言。
1.2编译器和解释器工作方式对比
编译器是一个罴盒子,源程序的翻译和翻译后程序的运行是两个
独立的不同阶段。而解释器采用另一种方式翻译源程序,它不像编译
器那样,把源程序的翻译和目标程序的运行分割丌来,而是把翻译和
运行结合在一起,翻译一段源程序紧接着就执行它,称之为解释。其
工作方式如图所示:
源程序
编译器
目标程序源程序
解释器
输出
输入数据→目标程序
输出输入数据一
a編译器的工作方式
(b)解释器的工作方式
联入式系统及应用课后作业
1.3对编译器各个阶段的划分
编译器工作阶段入下图所示
源程序
词法分析器
匿法分析器
语义分
表
中间代码生成器
代码优化器
目标代码生成器
目标代码
各个阶段具体工作通过下面例子进行讲解
现以仅包含一条声明语句和一条可执行语句的源程序为例,如下所示:
var x, y, Z: real;
X:=y+z*60;
首先进行此法分杆
var x, y, Z: real;
词法分析
var id1,id2, id3 real: id1: =id2+id3*60:
联入式系统及应用课后作业
1)词法分析是编译过程的基础,任务是扫描澒程序,根据语言的词法
规则分解和识别出每个单词,其输出是识别的记号流。
具体任务有以下五点:
(1)组织源程序的输入
(2)拼出单词并查找其类别编号,形成二元式输出,得到单词流文
件
(3)删除注释、空格和无用符号
(4)发现并定位词法错误,需要输出错误的位置在源程序中的第几
行。将错误信息输出到屏幕上。
5)对亍普通的标识符和常量,分别建立标识符表和常量表(使用
线性表存储),当遇到一个标识符和常量时,杳找标识符表和常量表。
若存在,则返回位置,否则,返回0.并填写常量表和符号表。
)语法分析器以词法分析器返回的记号流为输入构造句子的结构,并
以树的形式表示出来,称之为语法树,如下图1.5所示:
联入式系统及应用课后作业
语法分析
id2
idI
id2
图1.5语法树
语义分析
符号表
1 x real
rea
3z real 8
图1.6语义分析
3)语义分析器根据语法分析器构造的语法树,进行适当的语义处理。
对声明语句,进行符号表的查填,符号表中,每一行存放一个符号的
信息。第一行存放标识符ⅹ的信息,它的类型是real,为它分配的
地址是0.第二行存放y的信息,它的类型是rea1,为它分配的地址
是4.由此可知其为每个实型数分配一个大小为四个单元的存储空间。
对于可执行的语句,检查结构合理的表达式运算是否有意义。由于变
量x,y,z均是real类型而60被认为是 integer类型,故而,在语义
5
联入式系统及应用课后作业
检查时将60转化为60.0处理,反映在语法树上,就是增加·个新的
节点itr(将整型数转化为实型数),如上图1.6所示
4)中间代码生成器对语法树进行遍历,并生成可以执行的中间代码序
列,最常用的中间代码形式是四元式,其形式如下所示
(序号)(op,arg1,
argz,
result
操作符左操作数右操作数结果
其中操作符也被称作算符,操作数也被称作算子,其上式表示对这个
四元式中的arg1和arg2进行op运算,将结果存进 result。其中间
代码生成过程如图1.7:
中间代码生成
(1)fit,60,
T1)
(2)(*,id3,T1,T)
(3)(+,id2,T2,T3
(4)
T3
图17中间代码生成
5)屮间代码优化
分析上面图中的四个四元式可以看出,60是编译时已经知道的常数,
所以把它转换成60.0的工作可以在编译时完成,没有必要生成图中
6
联入式系统及应用课后作业
(1)号四元式,它的作用仅仅是把T3的值传给id1,因而其也是多余
的四元式,经过优化后其就变为两个四元式即
中间代码优化
(1)(*,id3,60.0,T1)
(2)(+,id2,T1,id1)
图18中间代码优化
6)根据优化后的中间代码生成目标代码,此处的目标代码使用的是汇
编指令,其中MOVF、MULF、ADDF分别表示浮点数的传送,乘和加操
作。对于二元运算MULF和ADF,操作形式为 OP source, target,
它表示 target:= source op target。即 Source和 target进行OP
运算,结果行进 target。对于一元运算MOVF,操作形式为M)VF
Source, target,它表示 target:= source,即将 Source中的内容
移进 targe
目标代码生成
MOVF id3, R2
MULF #60.0 R2
MOⅤFid2,Rl
ADDF R2. RI
MOVF R1. id1
图1.9目标代码生成
联入式系统及应用课后作业
⑦)错误检查和处理程序
程序编与人员编与的程序,错误是难免的,,一个仅能处理绝对正确
源程序的编译程序是没有价值的。一个比较完善的编译程序应具有广
泛的程序査错能力,并能准确的报告源程序的错误种类和错误出现的
位置。同时编译程序还应具有一定的校错能力。除报错外,编译程序
还可以生成一些另外的注释信息,帮助程序人员调整程序和编写程序
说明书。
8)信息表管理程序
在编译的过程屮,需要经常收集,记录或査询源程序屮所岀现的各种
量的有关属性。因而,需要建立或持有不同用途的表格(如常数表
各种名字表、表等)通常统称为符号表。
综上所述,对编译器各个阶段做如下归纳:
1.词法分析:词法分析器根据词法规灲识別出湶程序中的各个记号,
每个记号代表一类单词。源程序中的记号可以归为以下几大类:
(1)关键字:如var, begin,end等,具有特定含义,一般不作
它用,也成称保留字
(2)标识符:如x,y,z等,在源程序中被用作变量名,过程名
等所有对象名称。
8
联入式系统及应用课后作业
(3)字面量:如60, Xidian university等,一般表示常数或
字符串常量
(4)特殊符号:如+、
、;等,其在源程序具有特定的
作用,可被细分为运算符,分隔符等。
2.语法分析器根据语法规则识别出记号流中的结构,并构造相应的
反应该结构的语法树。语法树的数据结构一般采用典型的二叉树
结构,因任何形态的树都可向其转换。
语义分析:语义分析器根据语义规则对语法树中的语法单元进行
静态语义检査,如类型检査和转换等,其目的是为了语法正确的
结构在语义上也是合法的。
4.中间代码生成:中间代码生成器根据语义分析器的输出生成中间
代码。中间代码可以有若干形式,其共同的特征是与具体的札器
无关。最常用的一种中间代码是三地址码,它的一种实现方式是
四元式,三地址码的优点是便于阅读和优化。
5.屮间代码优化:由于编译器将源程序翻译成屮间代码是杌械式的。
因而,生成的中间代码往往在时间上和空间上有很大浪费。若要
生成高效的目标代码就必须进行优化处理。由于中间代码不依赖
丁机器,在中间代码一级进行优化可以避开与机器有关的因素
把精力集中在对控制流和数据流的分析上。因此优化的大部分工
作在目标代码生成之前进行,只有少部分与及其有关的优化放在
日标代码生成时执行。
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.