编译原理
把某高级语言书写的源程序翻译成与之等价的目标程序
编译过程
flowchart TB;
ST[符号表管理]
S[源程序]
LA[词法分析]
SA[语法分析]
SEA[语义分析]
TAC[中间代码生成]
CO[代码优化]
GTC[目标代码生成]
TC[目标代码]
EH[出错处理]
subgraph flow
S --> LA -->|符号流| SA -->|语法树| SEA -->|语法树| TAC -->|中间代码| CO -->|目标语言| GTC --> TC
end
ST --- flow --- EH
- 词法分析
- 顺序逐字扫描源程序,形成符号栈和值栈
- 语法分析
- 形成语法树,节点表示运算,子节点表示运算分量
- 语义分析
- 类型检查
- 类型转换
- 生成语法树
- 中间代码生成
- 通常使用四元式实现
- 代码优化
- 目标代码生成
- 符号表管理
- 出错处理
- 运行时动态错误/语义错误
- 编译时静态错误
- 语法错误
- 静态语义错误
语言
语言是有限字母表上的有限长度字符串的集合
字符串
- 字符
- 具有独立含义的最小单位一个字母、数字或符号
- 字母表
- 字母表是字符的非空有穷集合
- 字符是字母表中的元素
- 字符串
- 中字符组成的有穷序列
- 空串
- 长度为 0 的字符串
字符串运算
- 或运算/并运算
- 积运算/连接运算
- 幂运算
- 正闭包
- 闭包
文法
表示为一个四元组 ,用于描述语言语法结构的规则
构成
- 字母表/终结符集
- 语法变量集/非终结符集
- 词汇表
- 产生式集
- if
- 称 为 的候选式
- 开始符号
分类
- 0 型
- 短文语法
- 1 型
- 上下文有关语法
- 2 型
- 上下文无关文法
- 3
- 正规文法/线性文法
处理
- 推导与直接推导
- 归约和直接归约
- 等价
- 句型和句子
- 语言