编译程序的构造
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
两者的主要区别 ➢在前端和后端的数量上:GCC支持C、C++、Java等7种
源语言和MIPS、ARM等36种体系结构系列。LCC源语言 只支持标准C,后端支持ALPHA、MIPS R3000、 SPARC和x86 ➢在机器描述的能力上:GCC所描述的处理器信息较多,强 于LCC。 ➢在产生代码质量上:GCC经过20~30多遍的优化,大量测 试表明代码的稳定性较好。LCC经过少量的优化,代码质 量也比较可靠。 ➢GCC逐渐成为工业上的主流应用,LCC应用较少,且有被 GCC取代的趋势。
13.1 编译程序的书写
❖ 编译程序的构造主要有三条途径: ➢用某种程序语言书写编译程序 ➢通过LEX、YACC等工具进行自动构造 ➢通过现有的编译基础设施进行改造和组装
一.编译程序的书写语言与T型图 ❖编译程序的T型图,如图13.1所示:
❖ 如果一个编译程序的源语言是X,目标语言是Y,书写语 言是Z,把该编译程序记作CZXY,那么用T型图表示如图 13.2所示:
五、可重定向编译程序 ❖它能根据不同目标机,生成相应的目标代码,而普通编译程
序将源程序翻译成特定目标机的汇编代码或目标代码。 (1)可重定向编译程序不是针对特定机器的编译程序用户
而言的可重定向。 (2)可重定向编译程序不是编译程序的生成器。 (3)有多个针对不同机型的可选后端。
13.2 可重定向编译程序
二.编译程序的自展技术 ❖自展思想:先用目标机的汇编语言或机器语言书写源语言
的一个子集的编译程序,然后再用这个子集作为书写语言, 实现源语言的编译程序。如果把这个过程根据情况分成若 干步,像滚雪球一样直到生成预计源语言的编译程序为止, 把这样的实现方式称为自展技术
❖例如,在目标机A上要实现L语言的编译程序,可以把L的 核心部分划分为L1
➢4、及时针对新机器和新语言开发出配套的编译程序,减少 了采用新语言和新机器的障碍,有利于为产品创造更大的市 场。
二、支持可重定向编译的关键技术 ❖可重定向编译程序的目的是为了实现资源共享,方便于特
定目标机的编译程序的剪裁和移植,因此,传统的多目标 编译后端构造,中间表示、代码优化和代码生成等编译技 术,应该为可重定向编译程序的开发提供依据。
13.3 GCC的剖析
一.GCC的总体结构 ❖编译器的工作是将源代码(通常使用高级语言编写)翻译成
目标代码(通常是低级的目标代码或者机器语言),在现代 编译器的实现中,这个工作一般是分两个阶段来实现的: ➢第一阶段,编译器的前端接受输入的源代码,经过词法、 语法和语义分析等等得到源程序的某种中间表示方式 ➢第二阶段,编译器的后端将前端处理生成的中间表示方式 进行一些优化,并最终生成在目标机器上可运行的代码
A
❖结合T型图的原则是: (1)下面的T型图的左右上角两个语言分别与上面左右两个 T型图的底部语言相同 (2)上面左右两个T型图的左右上角的语言必须分别相同
❖如果把L分出L1,L2,这个过程用三层结合的T型图表示 如图13.6所示:
A
➢CALA CLL1A
CL1L2A
CL2LA
CAL2A
CALA
一、概述 ❖可重定向编译程序的研究和开发对于编译程序的构造具有 重大意义:
➢1、它缩短了编译程序的开发周期。 ➢2、它提高了编译程序研究的质量,使研究人员能够在抽象 级的平台上开发,把精力专注于研究本身而非基础建设。 ➢3、便于更多的队伍从事编译程序研究,且其研究成果能够 被很好地共享,从而可以加快步伐。
❖L可以分成核心L1,L2,…,Ln都为L1的逐步扩充,使得 L=Ln,其自展的示意图如图13.7所示:
三、交叉编译程序 ❖交叉编译:在一个平台上生成另一个平台上的可执行代码。 ❖平台:指体系结构、操作系统。 ❖需要它的原因: ➢1、目标平台上不允许或不能够安装所需要的编译程序,而又
需要这个编译程序的某些特征。 ➢2、目标平台上的资源贫乏,无法运行所需要的编译程序。 ➢3、目标平台还没有建立,没有操作系统,根本上谈不上运行
什么编译程序。 特点:与主机编译相比,交叉编译受到的限制更多:专利、版权、 技术。
四、编译基础设施 ❖编译基础设施是编译程序的开发环境,它提供一系列开发
编译程序的策略和工具,支持多种源语言、多目标机的编 译技术,以便于人们在具有较高抽象层次的平台上进行编 译程序开发和研究工作。
❖编译基础设施为开发各种编译程序成分提供相应的生成工 具。
➢第一步:先用A机器的汇编语言或机器语言A书写L1的编 译程序,表示为CAL1A,其T型图如图13.3所示:
➢第二步:再用L1书写L语言的编译程序为CL1LA,其T型图 如图13.4所示
➢第三步:由于最终要求得到CALA,只要把CL1LA经过CAL1A 即可得到CALA。可用图13.5的双层结合T型图表示:
➢GCC是FSF启动的GNU工程的一部分,其开发目标在于提
高GNU系统中编译程序的质量。
➢GCC目前已支持的源语言有:C、C++、Objective_C、JAVA 、Ada,已移植的平台有100多种,涉及30多种处理器、60多种系 统。
2、LCC是由普林斯顿大学的Christopher Fraser和David Hanson开发的可重定向的ANSI C编译程序,可供匿名使用。
1、中间表示技术 ❖中间表示是在编译程序将高级语言程序翻译为汇编语言或
机器代码的过程中产生的。 ❖在可重定向编译程序的研究中,应提供一种结构良好的中
间表示,这种中间表示应在适当的抽象层次上,向上能支 持多语言的映射,向下能适应多平台转换且宜于进行各种 优化。 2、机器描述技术 ❖研究表明,基于体系结构描述语言详细地指定体系结构是 产生高质量机器级工具的关键技术。
3、代码生成程序的构造技术 ❖一般来说,代码生成程序的构造器的输入是机器描述,输
出是代码生成程序。 4、目标机描述与目标代码生成的接口技术 ❖目标机描述与目标代码生成的接口,指定了与目标机无关
的前端及与目标机有关的后端之间的相互联系。
Hale Waihona Puke Baidu
三、常用的可重定向编译程序
1、目前在世界范围内得到广泛使用的可重定向编译程序是属于 自由软件的GCC(GNU compiler collection:http://gcc.gnu.org/)