【编译原理】1.编译器的前世今生

1.为什么需要编译器

  • PC只能识别二进制 0, 1。

  • 程序员为了提高编程效率,发明了高级的编程语言。

  • 借助编译器等工具,把高级语言转译为机器可以识别的语言,最后运行在PC上。

2.编译器是如何工作的

今天我们开始介绍编译器的工作过程。

先看一段用C语言实现加法计算 1+ 1 =2的代码:

#include <stdio.h>  //头文件
#include <stdlib.h>

int main( void ){
    int a; 
    a = 1 + 1;  //1+1的计算
    printf( "a=%d\n", a ); //输出结果
    return 0;                                                                                                                                                                                                   
}

对于上面代码最终需要经过几个工序处理后,才能变成二进制(目标代码)供PC识别。
在这里插入图片描述

本文着重介绍编译的过程。 也就是如何利用编译器生成汇编代码的过程。

以下方的一行代码举例,探讨编译器需要完成的工作。

a = 1 + 1;

(1)编译器需要识别出哪个是变量(如代码中的a), 哪个是操作数(如1),是什么操作符(如 =,赋值操作; +,加法操作)以及结束符(;),而且要去除代码中的空格。

(2)编译器需要判断这是一个加法运算表达式。

(3)生成特定机器可理解的二进制代码,方便机器进行加法计算。

让我们站在前人的肩膀上,以更严谨的态度重新理解编译器工作的过程。

在这里插入图片描述

首先,对于编译器来说,一行行的代码就是一行行的字符串。经过词法分析器的处理后,分析得出词法信息,也就是token流(相当于一个一个的单词),如下图所示
在这里插入图片描述

然后,通过语法分析器转换成语法树保存相应的信息,如下图所示。

在这里插入图片描述

接着,语义分析器根据语法树的信息理解相应的信息,借助中间代码生成器生成Intermediate representation, 又称中间代码

(中间代码的特点是:与硬件平台无关)
在这里插入图片描述

最后, 中间代码被相应的目标平台汇编成汇编代码。

(PS: 从这一步开始,就是与平台相关的产物)

在这里插入图片描述

汇编代码经过汇编器汇编,再链接成可执行文件后,就可以被PC执行了。

下一讲,我们将详细介绍词法分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值