gcc编译原理
2015-07-16 11:06
197 查看
引言
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小结
一个高级语言写的程序的执行,要经过很复杂漫长的过程。这个过程对我们程序员来说却经常被忽视。
向编译器创造者致敬。
编译原理的学习过程一般比较枯燥,多一个人同行,就多一份趣味和快乐!
作者:rill_zhen
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小结
一个高级语言写的程序的执行,要经过很复杂漫长的过程。这个过程对我们程序员来说却经常被忽视。
向编译器创造者致敬。
编译原理的学习过程一般比较枯燥,多一个人同行,就多一份趣味和快乐!
作者:rill_zhen
相关文章推荐
- static 变量和函数
- linux不使用文件名扩展识别文件类…
- 定义和指针
- 指针定义不分配内存
- 深搜专题初步-1006
- BZOJ 1019 [SHOI2008]汉诺塔
- Sublime
- 常用的几种加密算法介绍
- masonry,瀑布流
- 【Java】找出0到n之间的所有素数
- GNU Screen Splitting
- Bug基本要素/状态流程图/严重级别判断及管理工具
- 排序算法总结一(c++版)
- ABAP 正则表达式
- JavaScript的"类"
- myeclipse安装svn方法汇总
- hdu4861 我只能说这是找规律=.=
- 如何为SharePoint文档库、文件夹、文件单独设置权限
- RStudio的Markdown
- Wireshark数据抓包教程之Wireshark捕获数据