编译原理——编译程序的组成

在这里插入图片描述

1. 何为编译?

编译这个词相信你一定听到过很多次,那么编译是什么意思呢?这要从代码的执行过程说起。
以C语言为例,从源代码到目标可执行程序,要经历以下4个阶段:
在这里插入图片描述
此处编译器完成编译的作用,将高级语言变化为目标的机器语言/汇编语言。
此处的编译器就像一个翻译软件,将一种语言按照规则翻译为另一种语言。
那么编译器是怎么完成这个复杂的翻译过程的呢?请看下面的内容。

2. 编译程序的组成

编译程序其实可以分为两种,一种是单遍(pass)编译程序,一种是多遍编译程序。顾名思义,单遍编译程序就是只对源代码读取一遍,便可得到目标代码;而多遍编译程序则需要读取多遍,才能完成转化过程。

这样的话,既然一遍就可以得到目标代码,那为啥还要处理多遍呢?

别急,先让我们了解一下编译程序是由什么组成的。

2.1 编译过程

编译的过程包括如下几个部分:

词法分析
语法分析
语义分析
中间代码生成
代码优化
目标代码生成

看到这些乱七八糟的是不是很懵!没关系,咱们一个一个来理解一下。

  • 词法分析:识别出最小的语法单位,并表示其词性。(源程序字符串 → 单词符号)
  • 语法分析:根据单词词性分析语法。(单词符号 → 语法单位)
  • 语义分析与中间代码生成:根据单词值分析语义是否正确,生成中间代码。(语法单位 → 中间代码)
  • 代码优化:对中间代码进行优化,以期产生更高效的目标代码。(中间代码 → 优化后的中间代码)
  • 目标代码生成:将中间代码转换成低级语言代码。(中间代码 → 目标代码)

其实这个过程就像是我们在翻译英语文章的步骤,先分析每个单词的词性,再分析每个句子的语法,之后根据单词的意思套入语法,得到句子的翻译,但是句子的翻译要经过优化才能得到最终符合中文习惯的结果。

2.2 单遍编译程序

在这里插入图片描述
如图所示,单遍编译程序跳过了词法分析步骤,直接从语法分析开始,在需要用到单词的时候,才从词法分析取得单词,之后进行语义分析生成代码。与编译的程序相比,缺少优化代码的步骤。

2.3 多遍编译程序

在这里插入图片描述
如图所示,多遍编译程序按照步骤对程序进行编译,进行4遍操作,与单遍编译程序相比,多了局部优化、全局优化的步骤。

2.4 单遍与多遍区别

既然单遍就能完成的工作,为什么要进行多遍呢?

多遍遍历有如下有点:

  1. 可将编译分为编译阶段和执行阶段,使得编译程序具有可移植性。
  2. 多遍编译可以使得程序充分优化,产生高质量的代码
  3. 可以减少对内存的需求。

什么是可移植性呢?
在这里插入图片描述
多个前端与多个后端组合,起到不同的编译功能,就是可移植性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值