Fork me on GitHub

编译原理——第一课-绪论-笔记

第一课 绪论

编译器在语言处理系统中的位置

编译器的结构

1
2
3
4
5
6
7
8
9
10

graph TD;
字符流-->词法分析器;
词法分析器-->|词法单元流|语法分析器;
语法分析器-->|语法树|语义分析器;
语义分析器-->|语法树|中间代码生成器;
中间代码生成器-->|中间表示形式|机器无关代码优化器;
机器无关代码优化器-->|中间表示形式|目标代码生成器;
目标代码生成器-->|目标机器语言|机器相关代码优化器;
机器相关代码优化器-->目标机器语言;
词法分析/扫描(Scanning)
  • 主要任务

    从左向右逐行扫描源程序的字符,识别各个单词并确定类型,表示为词法单元(token)格式;

单词类型 种类 种别码
关键字 program、if、else、then、… 一词一码
标识符 变量名、数组名、记录名、过程名、… 多词一码
常量 整型、浮点型、字符型、布尔型、… 一型一码
运算符 算数 关系 逻辑 一词一码或者一型一码
界限符 ; () = {}… 一词一码
语法分析(parsing)
  • 从词法分析器的token序列中识别短语,构造语法分析树(parse tree)
语义分析
  • 主要任务:
    • 收集标识符的属性信息
      • 种属
        • 简单变量、符合变量(数组、记录、…)、过程
      • 类型
      • 存储位置、长度
      • 作用域
      • 参数与返回值信息
    • 语义检查
中间代码生成
  • 常用的中间表示形式
    • 三地址码
      • 类似汇编
      • 每个指令最多三个操作数
    • 语法结构树/语法树(Syntax Trees)
目标代码生成器
  • 以源程序的中间表示形式作为输入并映射到目标语言
  • 重要任务:分配合理的寄存器
代码优化
  • 等价程序变换以优化时空效率