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), 代码生成器将中间代码转换为目标机器代码。目标代码优化器对上述代码进行优化(比如选择合适的寻址方式,使用位移代替惩罚,删除多余指令等)。

      

  • 相关阅读:
    协成
    进程与线程-多线程
    进程与线程2
    进程与线程
    socket编程
    常用模块二(hashlib、configparser、logging)
    异常处理
    python之路——面向对象进阶
    封装
    初识——面向对象
  • 原文地址:https://www.cnblogs.com/Eric-scratch-paper/p/5061953.html
Copyright © 2011-2022 走看看