文章目录
第一章 引论
1、编译原理由那些部分组成
- 编译系统由那些部分组成(七大步骤)
- —(字符流)— 词法分析器 ----(记号流)–> 语法分析器 ----(语法树)—> 语义分析器 -----(语法树)—> 中间代码生成器 -----(中间表示)—> 独立于机器的代码优化器 -----(中间表示)----> 代码生成器 -----(目标机器代码)------> 依赖于机器的代码优化器 -----(目标机器代码)
词语义中代生 (符号表管理 出错管理)
第二章 词法分析
1、正闭包与闭包
- L+ 与 L*
2、正规式的定义
- 正规式表示的语言叫做正规语言或正规集。
如果约定 - (1)闭包运算(算符是 * )有最高的优先级并且是左结合的运算
- (2)连接运算(两个正规式并列)的优先级次之且也是左结合的运算
- (3)选择运算(算符是 | )的优先级最低且仍然是左结合的运算
那么可以避免正规式中一些不必要的括号。例如,((a)(b)*)|( c )
等价于 ab*|c
3、状态转化图
算法2.4
自顶向下方法
递归下降分析
预测分析
文法转换
-
含有
A→Aα
形式产生式的文法称为是直接左递归 -
如果一个文法中有一个非终结符A使得对某个串α存在一个推导
A =>+Aa
那么这个文法就是左递归 -
经过两步或两步以上推导产生的左道归称为是间接左递归的
左递归文法会使递归下降分析器陷入无限循环
消除直接左递归
消除间接左递归
提取左因子
提取左因子算法
LL(1) 文法
非终结符的后继符号集
终结符与非终结符
终结符
- 字母表前面的小写字母
a,b,c
- 黑体串 id 和 while
- 数字 1,2,3,4
- 标点符号 分号,短号
- 运算符号
+ -
非终结符
- 字母表前面的大写字母 ABC
- 字母 S 通常表示开始符号
- 小写字母组成的名字
expr
和stmt
计算文法的 FIRST集合
计算文法的 FOLLOW集合
计算文法的 SELECT集合
自上而下分析
非递归的预测分析
- 每次归约的符号串称为“句柄”
LR 分析文法
LR 分析表
LR 分析表的构造
LR(0)项目
构造分析表
- 移进 / 规约冲突 移进/ 移进 冲突
I 3 内的同属等价项目
SLR 分析
SLR 例子
P133
4.12
4.3
指令代价
P245