以下是计算机编译原理的知识大纲,涵盖核心概念、技术要点和关键流程,适合系统学习或复习:
一、编译原理概述
-
基本概念
- 编译器(Compiler)与解释器(Interpreter)的区别
- 编译过程的主要阶段(前端、优化、后端)
- 编译器的分类(单趟/多趟编译器、交叉编译器、即时编译器JIT)
-
编译流程总览
- 词法分析 → 语法分析 → 语义分析 → 中间代码生成 → 优化 → 目标代码生成
二、词法分析(Lexical Analysis)
- 核心任务
- 将源代码转换为**词法单元(Token)**序列(如标识符、关键字、运算符等)
- 关键技术
- 正则表达式(描述词法规则)
- 有限自动机(NFA与DFA的转换)
- 词法分析器生成工具(如Lex/Flex)
三、语法分析(Syntax Analysis)
- 核心任务
- 构建语法树(如抽象语法树AST),验证语法结构是否符合文法规则
- 文法理论
- 上下文无关文法(CFG)
- 推导与归约(最左推导、最右推导)
- 分析方法
- 自顶向下:递归下降分析、LL(1)分析法
- 自底向上:LR分析法(SLR、LALR、LR(1))、Yacc/Bison工具
四、语义分析(Semantic Analysis)
- 核心任务
- 类型检查、作用域分析、语义规则验证
- 符号表管理
- 符号表结构、作用域链、哈希表实现
- 语义动作
- 属性文法(继承属性与综合属性)
五、中间代码生成
- 中间表示形式
- 三地址码(Three-Address Code)
- 抽象语法树(AST)
- 静态单赋值形式(SSA)
- 生成策略
- 语法制导翻译(Syntax-Directed Translation)
六、代码优化
- 优化分类
- 机器无关优化(常量传播、公共子表达式消除、循环优化)
- 机器相关优化(寄存器分配、指令调度)
- 优化技术
- 数据流分析(活跃变量分析、到达定值分析)
- 控制流图(CFG)与基本块划分
七、目标代码生成
- 核心任务
- 将中间代码转换为目标机器指令(如x86、ARM)
- 关键技术
- 寄存器分配算法(图着色算法、线性扫描)
- 指令选择与调度
- 目标代码优化(窥孔优化)
八、运行时环境
- 存储管理
- 栈式存储(函数调用、活动记录)
- 堆管理(动态内存分配)
- 参数传递机制
- 传值、传引用、传名(Call by Value/Reference/Name)
- 垃圾回收
- 标记-清除、引用计数、分代回收
九、高级主题与扩展
- 现代编译技术
- 即时编译(JIT)与AOT编译
- 并行编译与多核优化
- 领域特定语言(DSL)编译器设计
- 工具与框架
- LLVM中间表示与工具链
- 编译器生成器(ANTLR、Bison)
十、实践建议
- 项目实践
- 实现小型编译器(如TinyC、Decaf)
- 使用Flex/Bison或ANTLR构建词法/语法分析器
- 经典教材
- 《编译原理》(龙书,Alfred V. Aho等)
- 《现代编译原理:C语言描述》(虎书,Andrew W. Appel)
通过此大纲,可系统掌握编译原理的核心理论与技术,建议结合实践项目(如实现简单编程语言的编译器)加深理解。