c++ 编译原理

2020-01-18  本文已影响0人  海子xxh

原文链接:https://blog.csdn.net/HSUPERA/article/details/51895230

概述

集成开发环境是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器,调试器和图形用户界面工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。具体包括:
- 编辑器:编写代码的一些窗口;
- 编译器:检查用户代码的一些语法错误,将其编译成汇编代码;
- 汇编器:将编译出来的汇编文件编译成一定功能的目标代码;
- 连接器:将目标代码连接成可执行文件。

编译器

一个编译器包括一下几个部分:

  1. 词法分析:扫描器(Scanner)将源代的字符序列分割成一系列的记号(Token)。lex工具可实现词法扫描;
  2. 语法分析:语法分析器将记号(Token)产生语法树(Syntax Tree)。yacc工具可实现语法分析(yacc: Yet Another Compiler Compiler);
  3. 语义分析:静态语义(在编译器可以确定的语义)、动态语义(只能在运行期才能确定的语义);
  4. 源代码优化:源代码优化器(Source Code Optimizer),将整个语法书转化为中间代码(Intermediate Code)(中间代码是与目标机器和运行环境无关的)。中间代码使得编译器被分为前端和后端。编译器前端负责产生机器无关的中间代码;编译器后端将中间代码转化为目标机器代码;
  5. 目标代码生成:代码生成器(Code Generator);
  6. 目标代码优化:目标代码优化器(Target Code Optimizer)。

编译过程

了解了以上几个概念后,正式进入C语言的编译原理及过程:
C语言编译的完整过程:C源程序--->预编译处理--->编译、优化处理--->汇编程序--->链接程序--->可执行文件

以上过程可以简单的分为4大步骤:预处理--->编译--->汇编--->链接

  1. 预处理
    包括以下几个过程:

gcc -E *.c -o *.i

参数-E表示只进行预处理

  1. 编译
    编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生成相应的汇编代码。 使用一下指令进行编译:

gcc –S *.i –o *.s

  1. 汇编
    汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。根据汇编指令和机器指令的对照表一一翻译即可。用一下指令进行汇编:

gcc –c *.c –o *.o

  1. 链接
    通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件., 链接的主要内容是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,链接分为静态链接和动态链接。
上一篇下一篇

猜你喜欢

热点阅读