0%

CS323 编译原理 期末复习

引论

编程语言的演化

  • 机器语言 -> 汇编语言 -> 高级语言
  • 各种典型语言的特征

编译器的结构

  • 前端和后端的划分
  • 各组成部分及其作用

编译器 V.S. 解释器

词法分析

token, pattern, lexeme, string, language

Grammar calculation: 并,连接,Kleene闭包,正闭包

正则表达式及正则语言

有限自动机

  • NFA:非确定有限自动机
  • DFA:确定有限自动机

两个关键算法

  • 正则表达式转NFA(Thompson构造法)
  • NFA转DFA(子集构造法)

语法分析

上下文无关文法及上下文无关语言:终结符、非终结符、产生式

推导 (derivation):最左最右推导

文法的句型 (sentential form)

文法的句子 (sentence)

语法分析树 (parse tree)

抽象语法树 (abstract syntax tree)

文法的二义性

正则表达式 V.S. 上下文无关文法:正则语言 V.S. 上下文无关语言

语法分析技术

  • 自顶向下分析方法

    • 递归下降语法分析 (Recursive-descent parsing)
    • LL(1)文法及预测分析表的构造
    • 非递归表格驱动的语法分析
  • 自底向上分析方法

    • 移入-归约语法分析框架 (Shift-reduce parsing)
    • LR语法分析器及分析算法
      • SLR方法 (尤其是LR(0) 项集族构造)
      • CLR、LALR算法细节不考,但三种LR算法的基本原理和优劣需要了解

语法制导的翻译

语法制导定义 (Syntax-directed definitions)

语法制导的翻译方案 (Syntax-directed translation schemes)

属性:合成属性和继承属性

语义规则 (semantic rules) 和 语义动作(semantic actions)

语法制导定义属性值的计算顺序:依赖图

S属性的语法制导定义、L属性的语法制导定义

中间代码生成

三地址码指令及其表示方法:四元式、三元式、间接三元式

类型检查

  • 类型表达式
  • 类型等价:名等价、结构等价
  • 强类型、弱类型

数组元素相对地址计算

  • 行优先布局
  • 列优先布局

类型转化:拓宽、窄化

控制流翻译中的回填技术(了解基本思想、不考细节)

运行时刻环境

运行时刻内存的逻辑构成(代码区、堆区、栈区等)

方法调用

  • 活动树(activation tree)
  • 活动记录(activation record)
  • 方法调用栈
  • 调用代码序列和返回代码序列的作用

内存管理

  • 内存的分配和回收
  • 程序局部性现象
  • 内存碎片化现象

代码生成

如何为方法调用及返回生成代码

  • 静态分配
  • 栈式分配

基本块和控制流图

  • 基本块切分算法
  • 控制流图构造算法

控制流图中的循环

寄存器分配

  • 寄存器描述符和地址描述符的作用
  • 寄存器分配算法(掌握基本原则即可)

代码优化

常见局部优化技术

  • 局部公共子表达式消除
  • 死代码消除
  • 代数恒等式的应用

数据流分析框架及经典问题(到达定值)