1.《编译器设计》----编译器概观

概述

编译器是一种计算机程序,负责将一种语言辨析的冲虚转换为另一种语言编写的程序,同时 编译器也是一种大型软件系统,包括许多内部组件和算法及其之间复杂的交互

1.1简介

几乎所有的软件都是通过称为编译器的工具转换而来的,编译器也只是一个计算机程序,它转换其它计算机程序,并使之准备好执行。

1.概念路线图

编译器是一种工具,将一种语言编写的软件转换为另一种语言,它需要理解输出语言中支配语法和语义的规则,需要一种方案,以便将内容从源语言映射到目标语言。
编译器有一个前端,用于处理源语言,它还有一个后端,用于处理目标语言。为将前端和和后端连接起来,编译器有一种形式化的结构,他用一种中间件形式来表示程序,中间形式的语言很大程度生独立于源语言好目标语言,为改建转换,编译器通常包括一个优化器,来分析并重写中间形式。

2.概述

b编译器将以某种语言编写的程序作为输入,产生一个等价的程序作为输出。
在这里插入图片描述
在这里插入图片描述
一些语言采用的转换方案,包括编译也包括结束,java从源代码编译为一种字节码的形式,这是一种紧凑的标识,意在减少java应用程序的下载时间,java应用程序是通过在对应的java虚拟机(JVM)上运行字节码来执行的,JVM是一种字节码的解释器,许多JVM的实现包括了一个运行是执行的编译器,有事称为JIT编译器。
虚拟机:虚拟机是针对某种处理器的模拟器,他是针对计算机指令集的解释器。
解释器和编译器有许多共同之处,他们执行许多同样的任务,二者都要分许输入程序,并判定它是否是有效的程序,二者都会简历一个内部模型,表示输入程序的结构的语义,二周都要确定执行期间在何处储存值。

3.为何研究编译器的构建

编译器是一个庞大,复杂的程序
一个和的编译器是子成天地的,包含了整个计算机可续的一个映像
编译器遵守的规则:

  • 编译器必须保持被编译程序的语义
  • 编译器必须可以某种可觉察的方式改进输入程序

1.2编译器结构

在这里插入图片描述
编译器两个主要部分的设计:前端和后端
前端专注于理解源语言程序,后端专注于将程序映射到目标机。
前端必须将其对源程序的认识编码到某种结构中,一供后端使用。中间表示(IR)成为了编译器对所转换代码的权威表示。
IR:编译器使用一些数据结构来表示它处理的代码,这种形式成为中间表示。
在这里插入图片描述
优化器:编译器的中间部分称为优化器,负责分析并转换IR,以改进IR。
优化器是一个IR到IR的转换 器,试图在某些方面改进IR程序,优化器可以对IR处理一遍或多边分析IR并重写IR。
实际上阶段内部都划分为若干趟
在这里插入图片描述

1.3.1前端

词法分析器:编译器中的一趟,将字符构成的串转换为电词构成的流。
语法分析器:编译器中的一趟,判断输入流是否是源语言的一个句子。

1.3.3后端

编译器的后端会遍历代码的IR形式并针对目标输出代码,对于美国IR操作,后端都会选择对应的目标机操作来实现它,同时后端会选择一个次序,是的操作能够高效执行,后端还会确定哪些值能后驻留在寄存器中,哪些值需要放置在内存中,并插入代码来实施相应的决策。
虚拟寄存器:一个符号寄存名,,编译器用其来表示某个值可以保存在寄存器中

1.4小结和展望

编译器构建是一项复杂任务。好的编译器合并了来自形式语言理论、算法硏究、人工智能、系统
设计、计算机体系结构和程序设计语言理论的思想,并将其应用到程序转换的问题上。编译器汇集了贪心算法、启发式技术、图算法、动态规划,DFA和NFA、不动点算法、同步和局部性、分配和命名,以及流水线管理。编译器面临的许多问题很难给出最优解,因此它使用近似算法、启发式技术和经验规则。这样做产生的复杂交互可能导致令人惊奇的结果,好坏兼有。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值