引言
gcc现在的意思是“GUN编译器集合”,这里说的是上个世纪的意思“GUN C语言编译器”。
2.1程序的一般编译过程
以gcc为例:
一般情况下,比如我们有一个源文件:main.c,里面写的是我们的代码。想执行以下,gcc main.c,执行以下这个命令就会生成一个a.out的文件。然后./a.out就可以执行了。但是,这中间的过程可注意过吗?这就是编译原理要研究的内容了。这一节先说一下整个的处理过程,具体细节会在以后逐渐讨论,包括,词法分析,语法分析,中间代码生成和优化,优化又包括机器无关优化,并行性和局部性优化,等等这些内容。以及如何自己发明一种语言,然后自己动手写一个编译器将其编译!
分别加入参数可查看各个阶段的结果。
在上图中,CPP是“预编译”的缩写,AST是“抽象语法树”的缩写,SSA是“静态单赋值”的缩写,RTL是“寄存器传输语言”的缩写。各种含义,需要仔细品味一下,呵呵。
过程如下:
1》将不同语言,进行词法分析,语法分析,得到对应语言的AST
2》这些AST之间有稍微的差别,然后把这些差别去除,生成通用AST
3》按照AST,生成中间代码(三地址代码,即:x=y op z)
4》对中间代码进行优化,这部分的任务很艰巨
5》根据目标机器的汇编描述,生成对应机器架构的汇编语言
6》到此编译器的任务就算完了,剩下的汇编器。
7》汇编器将其汇编成机器代码(010100101000101010010101010000101011110.。。。。。)
8》连接器ld将源码中调用的库函数连接进来
9》最后,是加载器,将可执行文件加载到内存,并执行之。
2.2编译器的前端处理过程
下面是一句简单的c语句的编译过程。
如图所示:
2.3小结
一个高级语言写的程序的执行,要经过很复杂漫长的过程。这个过程对我们程序员来说却经常被忽视。
向编译器创造者致敬。
编译原理的学习过程一般比较枯燥,多一个人同行,就多一份趣味和快乐!
分享到:
相关推荐
arm-linux-gcc交叉编译器7.3.1,适用 ARM -A9 等ARMV7-32的硬件环境,在Linaro官网下载最新版。此编译器是GNU版,按照官网说法是跑应用程序,不是跑裸机,跑裸机的编译器我也上传到我的号了,可以下载
Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-...
Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-...
Linux编译器 交叉编译
arm-linux-gcc交叉编译器 arm-linux-gcc交叉编译器 arm-linux-gcc交叉编译器 arm-linux-gcc交叉编译器
arm-linux-gcc-4.3.2交叉编译器,主要用来交叉编译文件
fedora14中安装arm-linux-gcc交叉编译器.pdf
aarch64-linux-gcc交叉编译器(适用裸机程序编译,编译Uboot等)ARMV8-64,ARM-A53等,32位ARMV7-32的硬件的不能上传,这里给个链接:链接:链接:https://pan.baidu.com/s/19cypHP3T7mWGkmqNyEoo2A 提取码:yrnt
ESP32C3GCC编译器。xtensa-esp32-elf-gcc8_4_0-esp-2021r2-patch2-win64
arm-linux-gcc-3.3.2 交叉编译器的建立 ,描述了如何建立交叉编译环境的具体步骤,再次针对arm平台,其它类似
arm-linux-gcc 4.4.3版本安装步骤 将压缩包arm-linux-gcc.tar.gz解压到arm-linux-gcc文件夹 tar zcvf arm-linux-gcc.tar.gz arm-linux-gcc 将创建目录 mkdir /home/linux/arm-linux-gcc 将解压后的文件拷贝到安装...
arm-linux-gcc-4.5.1(友善之臂提供的最新交叉编译器)!
Linux编译器 交叉编译
本文件为arm-linux-gcc-4.3.2.tgz的part2 arm-linux-gcc-4.3.2.tgz.ab,需要与arm-linux-gcc-4.3.2.tgz的part1 arm-linux-gcc-4.3.2.tgz.aa 合并成一个文件arm-linux-gcc-4.3.2.tgz 安装方法: 0. cat arm-linux-gcc-...
arm-linux-gcc-3.3.2_安装交叉编译器
TDM-GCC-64是一个基于GCC的c++编译器,可以在Windows上进行C/C++语言编译。 TDM-GCC是非官方组织提供及维护的编译器集成包。TDM-GCC集成了最新的稳定版本的GCC工具集,以及一些实用的补丁。
Keil5配置GCC编译器编译STM32工程,具体配置可以参考我的博客http://my.csdn.net/weixin_39871788
1、在gcc--4.9.1的平级目录建一个编译目录 2、配置 ../gcc-4.9.1/configure --prefix=/usr/local/gcc-4.9.1 --enable-threads=posix --enable-stage1-checking=release --enable-stage1-languages=c,c++ --disable-...
Cygwin下的arm-linux-gcc交叉编译器,版本:4.8.4
本人亲自在Ubuntu 18.04安装了这个版本的arm-linux-gcc,没有问题,直接按我的步骤安装就没任何问题,直接就可以用。我这个给的是下载地址,不是压缩,根据文档去下载吧,安装教程:...