知识点总结
杂乱
消除左递归的方法
句柄
句柄:句型的最左直接短语
LL文法判断
1 | 当且仅当G的任意两个具有相同左部的产生式A → α | β 满足下面的条件: |
LR四种文法的判断
1 | 关系:LR(0)<SLR(1)<LALR(1)<LR(1) |
1.判断LR(0)文法:
看项目中是否有归约-归约和移进-归约冲突。
如果无冲突则是LR(0)文法(如果是LR(0)文法则四种都是);如果有冲突则不是LR(0)文法。(就要向下判断)
2.判断SLR(1)文法:
a:DFA中存在冲突项目(归约-归约,归约-移进)
b:{a1,a2,…,an},FOLLOW(B1),FOLLOW(B2)两两互不相交,(交集=空集)时是SLR(1)项目。
【也就是说,同时满足两个条件才是SLR(1)文法】
若不是再向下判断。
3.判断LR(1)文法:
构造带向前搜索符的DFA,无归约-归约冲突则是LR(1)文法。
【此处意思是如果有向前搜索符还有冲突的话就不是LR(1)文法,就要再向下判断】
4.判断LALR(1)文法:
合并同心集后无(归约-归约)冲突(在之前的基础上)
(核相同,向前搜索符不同)
(B->a,a
B->a,a|b
同心集)
LR即指LR(1)
四元式知识点
一些函数
赋值语句的翻译
1 | newtemp( ):生成一个新的临时变量t,返回t的地址 |
数组引用的翻译
1 | L的综合属性 |
控制语句的翻译
1 | 继承属性 |
回填
非终结符B的综合属性
1 | B.truelist:指向一个包含跳转指令的列表,这些指令最终获得的目标标号就是当B为真时控制流应该转向的指令的标号 |
函数
1 | makelist( i ) |
1 | nextquad:即将生成的下一条指令的标号 |
优化方法
NFA到DFA的转换
词法分析
词法分析阶段可检测错误的类型:
1 | 单词拼写错误 |
语法分析
最左规约称为规范规约,而最右推导相应的称为规范推导。
LL错误恢复:恐慌模式
LR错误恢复:恐慌模式错误恢复;短语层次错误恢复
语法制导翻译
这两种情况下,SDT可在语法分析过程中实现
1 | 基本文法可以使用LR分析技术,且SDD是S属性的 |
给定一个以LL文法为基础的L-SDD,可以修改这个文法,并在LR语法分析过程中计算这个新文法之上的SDD
1 | 给定一个以LL文法为基础的L-属性定义,可以修改这个文法,并在LR语法分析过程中计算这个新文法之上的SDD |
中间代码生成
类型表达式
控制流语句SDT编写要点
1 | 分析每一个非终结符之前 |
运行存储分配
活动记录的一般形式
静态存储分配
顺序分配法
层次分配法
栈式存储分配
活动树
调用序列与返回序列
代码优化
如果表达式x op y先前已被计算过,并且从先前的计算到现在,x op y中变量的值没有改变,那么x op y的这次出现就称为公共子表达式
复制传播:在复制语句x = y之后尽可能地用y代替x
对于一个变量x ,如果存在一个正的或负的常数c使得每次x被赋值时它的值总增加c ,那么x就称为归纳变量
DAG
数组元素赋值
数据流分析
到达定值分析
正常
作用:
循环不变计算的检测
1 | 如果循环中含有赋值x=y+z ,而y和z所有可能的定值都在循环外面(包括y或z是常数的特殊情况) ,那么y+z就是循环不变计算 |
常量合并
1 | 如果对变量x的某次使用只有一个定值可以到达,并且该定值把一个常量赋给x ,那么可以简单地把x替换为该常量 |
ud链
活跃变量分析
活跃变量:对于变量x和程序点p,如果在流图中沿着从p开始的某条路径会引用变量x在p点的值,则称变量x在点p是活跃(live)的,否则称变量x在点p不活跃(dead)
逆向分析
用途:
删除无用赋值
1 | 无用赋值:如果x在点p的定值在基本块内所有后继点都不被引用,且x在基本块出口之后又是不活跃的,那么x在点p的定值就是无用的 |
为基本块分配寄存器
1 | 如果所有寄存器都被占用,并且还需要申请一个寄存器,则应该考虑使用已经存放了死亡值的寄存器,因为这个值不需要保存到内存 |
du链
可用表达式分析
概念:如果从流图的首节点到达程序点 p的每条路径都对表达式x op y进行计算,并且从最后一个这样的计算到点p之间没有再次对x或y定值,那么表达式x op y在点 p是可用的
初始化时出enter外每个out都是全集
用途:
消除全局公共子表达式
进行复制传播
代码生成
主要任务
1 | 指令选择 |
题目总结
词素分析
符号表
递归的预测分析
非递归的预测分析
设计SDD
改写SDT
递归的翻译
非递归的翻译
活动记录
嵌套深度
找自然循坏
全局优化
句柄
注释语法分析树
翻译赋值语句
控制流翻译
四元式序列
翻译方案
13.5 难
13.6
14.4
求trulist
活动树
DAG
数值分析