重温编译原理
2008-05-09 18:31
197 查看
今天重新读了一下编译原理这本电子书(PDF,可在CSDN下载),觉得理解一下编译过程还是比较重要的,特别是第一章 概论 对编译过程的描述和第七章 运行时环境 的描述。
1 编译过程
1) 预处理
包括去除注释,宏替换,include文件
2) 词法分析
生成符号表
3) 语法分析
生成分析树,该树的叶子节点都是符号表中的符号(现在更趋向生成语法树,它取消了一些节点)
4) 语义分析
这时主要是指静态语义:包括声明和类型检查,生成注释树
5) 源代码优化
比如:常量合并(类似于4+2这种形式直接转换成6),生成中间代码
6) 代码生成
生成目标机器的代码。
7) 目标代码优化
还是目标代码
8) 连接
将不同文件的目标代码收集到一个可执行文件中,还连接目标程序和用于标准库函数的代码,以及连接目标程序和由计算机OS提供的资源。连接过程对OS和处理器有极大的依赖。
2 运行时环境
1)存储器组织
动态:寄存器和RAM的使用
静态:代码区,全局/静态数据区
小的整形值由编译器直接插入,大的整形值,浮点数,特别是串文字都是分配到全局/静态数据区的。
一种典型结构:
+------------------------------------+
| 代码区域 |
+------------------------------------+
| 全局/静态区域 |
+------------------------------------+
| 栈 |
+------------------------------------+
| 自 |
| 由 |
| 区 |
| 域 |
+------------------------------------+
| 堆 |
+------------------------------------+
但在More effective c++中对内存区的结构描述,注意它的全局区在堆下面:
1 编译过程
1) 预处理
包括去除注释,宏替换,include文件
2) 词法分析
生成符号表
3) 语法分析
生成分析树,该树的叶子节点都是符号表中的符号(现在更趋向生成语法树,它取消了一些节点)
4) 语义分析
这时主要是指静态语义:包括声明和类型检查,生成注释树
5) 源代码优化
比如:常量合并(类似于4+2这种形式直接转换成6),生成中间代码
6) 代码生成
生成目标机器的代码。
7) 目标代码优化
还是目标代码
8) 连接
将不同文件的目标代码收集到一个可执行文件中,还连接目标程序和用于标准库函数的代码,以及连接目标程序和由计算机OS提供的资源。连接过程对OS和处理器有极大的依赖。
2 运行时环境
1)存储器组织
动态:寄存器和RAM的使用
静态:代码区,全局/静态数据区
小的整形值由编译器直接插入,大的整形值,浮点数,特别是串文字都是分配到全局/静态数据区的。
一种典型结构:
+------------------------------------+
| 代码区域 |
+------------------------------------+
| 全局/静态区域 |
+------------------------------------+
| 栈 |
+------------------------------------+
| 自 |
| 由 |
| 区 |
| 域 |
+------------------------------------+
| 堆 |
+------------------------------------+
但在More effective c++中对内存区的结构描述,注意它的全局区在堆下面:
相关文章推荐
- 重温编译原理(1)
- 重温编译原理(1)
- .NET程序编译原理
- 编译原理——变量声明语句(六)
- 识别浮点常量问题-编译原理程序实现
- 编译原理——变量声明语句(十五)
- 编译原理——赋值语句和简单表达式(十三)
- 编译原理—递归下降分析
- 学会编译原理的重要性
- linux下编译原理分析
- 编译原理 实验1 PL/0语言词法分析
- 编译原理与编译构造 LR文法
- 【编译原理】语法分析(二)
- 编译原理三大经书
- (编译原理)TINY扩充语言的语法分析
- (转)Android开发学习笔记(二)——编译和运行原理(1)
- 编译原理中四种文法语言的基本概念
- 哈工大编译原理实验一词法分析
- 编译原理课堂笔记(1)编译概述
- 编译原理(二) NFA的确定化及DFA的最小化的算法及C++实现