zoukankan      html  css  js  c++  java
  • 编译器行为(linux)

    1、预处理(prepressing)

      · 将"#define","#if"等宏定义,条件编译指令展开

      · 删除注释"//"和'/**/'

      · 添加行号和文件名标识

      · 保留所有"#pragma"编译器指令

      · output: *.i

    2、编译(compilation) ---- 核心 ---  as

      · 词法分析

      · 语法分析

      · 语义分析

      · 优化后生产相应的汇编代码

      · output: *.s

    3、汇编

      · 根据汇编指令和机器指令的对照表一一进行翻译

      · output: *.o

    4、链接

      · 链接所有*.o文件,生成可执行文件

      · output: *.out

    -------------------------------------------------------------------------------------------------

    编译过程分为6步:

      扫描 - 词法分析 - 语义分析 - 源代码分析 - 代码生成 - 目标代码优化

      

    · 词法分析 --- 使用lex层序实现词法扫描

      运用一种类似于有限状态机(Finite State Machine)的算法将源代码的字符序列分割成一系列的记号(token),词法分析产生的几号一般可分为以下几类:关键字,标识符,字面量(包括数字,字符号等)和特殊符号(如加号,等号)

    · 语法分析 --- 使用yacc (Yet Another Compiler Compliler)工具

      词法分析其(Grammar Parser)将由扫描器产生的记号进行词法分析,从而产生语法书(Synatax Tree),整个过程采用了上下文无关语法。

    · 语义分析

      编译器所能分析的语义是“静态语义”(Static Sematic),即编译期间即可确定的语义,如声明,类型转换等。

    · 中间语言生成

      源码级优化器(Source Code Optimizer),将语法树等转换为中间代码(Intermediate Code),如三址码(x = y op z)和p-代码,中间代码使编译器可以被分为前端和后端。编译器前端负责产生机器无关的中间代码,编译器后端将中间代码转换为目标代码。

    · 目标代码生成与优化

      编译器后端主要包括代码生成器(Code Generator)与目标代码优化器(Target code Optimizer), 代码生成器将中间代码转换为目标机器代码。目标代码优化器对上述代码进行优化(比如选择合适的寻址方式,使用位移代替惩罚,删除多余指令等)。

      

  • 相关阅读:
    C语言 sprintf 函数 C语言零基础入门教程
    C语言 printf 函数 C语言零基础入门教程
    C语言 文件读写 fgets 函数 C语言零基础入门教程
    C语言 文件读写 fputs 函数 C语言零基础入门教程
    C语言 fprintf 函数 C语言零基础入门教程
    C语言 文件读写 fgetc 函数 C语言零基础入门教程
    C语言 文件读写 fputc 函数 C语言零基础入门教程
    C语言 strlen 函数 C语言零基础入门教程
    Brad Abrams关于Naming Conventions的演讲中涉及到的生词集解
    适配器模式
  • 原文地址:https://www.cnblogs.com/Eric-scratch-paper/p/5061953.html
Copyright © 2011-2022 走看看