编译原理随笔1

<!doctype html>

编译原理

编译原理概述

1、编译概念:

  • 从高级语言->目标代码的过程(汇编语言or机器码)

2、编译器的结构:

  • 分析部分/前端(front end)->与源语言相关

    1. 词法分析>>词法单元流
    2. 语法分析>>语法分析树parse tree
    3. 语义分析>>语法树
    4. 中间代码生成>>中间表示形式
    5. 机器无关的代码优化
  • 综合部分/后端(back end)->与目标语言相关

    1. 目标代码生成>>目标机器语言
    2. 机器相关代码优化>>目标机器语言

3、词法分析

  • 主要任务:

    • 扫描源程序->识别每个单词->确定单词类型->将识别的单词换成机内表示(即:词法单元token)

    • token:<种别码:属性值>

      • 单词类型 种别 种别码
        关键字 if 等 一词一码
        标识符 变量、数组名、过程名…… 多词一码
        常量   多词一码
        运算符 算术运算符:+-
        关系运算符:> < ==
        逻辑运算符:& ! ||
        一词一码
        一型一码
        界限符 ;{}()=…… 一词一码

4、语法分析

  • 概念:语法分析器Parser从词法分析器输出的token中,识别各类短语,构造语法分析树parse tree
  • 1563886893948
  • 1563887016328

5、语义分析

  • 主要任务:

    • 收集标识符的属性信息->>>存放在符号表Symbol Table

      1. 种属kind
      2. 类型type
      3. 存储位置、长度
      4. 作用域
      5. 参数和返回值信息
      6. 1563887456617
    • 语义检查:

      1. 变量or过程未经声明便使用
      2. ……重复声明
      3. 运算分量类型不匹配(强制类型转换or报错)

6、中间代码生成

  • 中间表示形式:

    • 三地址码Three-address Code

      • 1563888449816

      • 三地址指令的表示形式:

        • 三元式

        • 间接三元式

        • 四元式

          • 1563888570767
          • 1563888909029
    • 语法结构树/语法树Syntax Tree

7、目标代码生成:

  • 中间表示形式作为输入,映射到目标语言

    • 重要作用:为程序变量使用分配寄存器

8、代码优化

  • 等价程序变换,使其运行快,占内存少。

猜你喜欢

转载自www.cnblogs.com/sqchao/p/11234860.html