【期末总结】编译原理

概念总结

CFG👉上下文无关文法
CSG👉上下文有关文法
LL👉自上而下 从左到右扫描+最左推导
LR家族👉自下而上 从左到右+自底向上

不存在冲突👉LR0
follow集相交为空👉SLR
合并同心集不会产生新冲突👉LALR
合并产生归约归约冲突👉LR1

重要考点

  • 编译六步骤⚠️必考
    词法分析👉语法分析👉语义分析👉中间代码生成👉代码优化👉目标代码生成

  • 字母表运算
    1⃣️乘积
    2⃣️n次幂
    3⃣️正闭包
    4⃣️克林闭包

  • 文法
    G=(Vt,Vn,P,S)
    递归文法👉无限集
    语言👉句子的集合
    1⃣️终结符与非终结符
    终结符Vt👉文法定义基本符号
    非终结符Vn👉表示语法成分 又称语法变量
    产生式T👉合成串的一般形式
    开始符号S👉最大语法成分

2⃣️四大类👉逐级包含 0部最大
0型文法👉只要左部包含一个Vn即可
无限制文法/短语结构文法
产生0型语言
1型文法👉上下文有关文法CSG
产生上下文有关语言
左边符号个数必须比右边少
2型文法👉上下文无关文法CFG
产生上下文无关语言
左边必须是Vn
下推自动机识别
3型文法👉正则文法RG
有穷自动机识别
左线性👉右部非终结符没有/只有一个在最左端
右线性👉…在最右端

3⃣️构造语法树⚠️必考
需要结合推导过程
直接短语👉高度为2的部分
直接短语一定是产生式右部
右部不一定是直接短语
一个句子同文法多棵分析树👉二义性文法

  • 正则表达式RE👉交换律结合律分配律…
    优先级从小到大👉或/连接/克林闭包
    有穷自动机👉最长子串匹配原则

  • 有穷自动机⚠️NFA转DFA必考
    1⃣️DFA 确定的有穷自动机
    2⃣️NFA 非确定的有穷自动机
    唯一区别👉状态1遇到同种输入可有不同转换
    3⃣️正则RE转NFA👉逐层分解
    3⃣️NFA转DFA👉列转换表 挨步转换

  • 自顶向下/自底向上语法分析

1⃣️最左归约👉规范归约
最右推导👉规范推导
2⃣️最左推导👉自顶向下
最右归约👉自底向上(逆过程)

构造语法树👉按输入指针+最左推导一步步来

  • LL(1)
    预测分析法

1⃣️判断是不是👉计算FIRST FOLLOW集👉再计算SELECT集👉相同左部的SELECT互不相交👉则为LL1👉构造预测分析表
2⃣️递归的预测分析法
👉为非终结符编写递归下降过程
非递归的预测分析法
👉构造自动机👉由表驱动的预测分析

🐸FIRST集👉串首终结符集合
🐸FOLLOW集👉跟在A后面的终结符集合
🐸SELECT集👉列表筛选

🐸根据SELECT集构造预测分析表
1⃣️提取左公共因子👉设S’👉aAb👉aS’
2⃣️消除左递归👉代公式

  • 自底向上语法分析👉最左归约
    核心👉移入-归约

  • LR分析法👉无冲突则为LR(0)文法
    1⃣️构造LR0分析表
    找项目集闭包👉写出DFA👉画图
    ACTION GOTO
    s代表状态 r代表产生式 acc表示接收成功
    2⃣️移进/归约冲突👉SLR(1)👉LR(1)的特例
    归约/归约冲突👉LALR可能还有
    3⃣️CFG不一定是LR0文法
    4⃣️文法处理能力 圆圈越大越强

  • 语法制导翻译
    SDD👉语法制导定义
    SDT👉语法制导翻译方案👉SDD的一种补充

  • 运行存储分配
    1⃣️静态存储分配👉编译时刻
    👉编译时刻确定大小的数据对象,在编译时刻就分配存储空间

2⃣️动态存储分配👉运行时刻
👉不能在编译时刻确定大小(如动态数组),在运行时再分配存储空间
👉栈式存储分配/堆式存储分配

栈👉活动记录👉过程调用时进栈 返回时出栈
堆👉把连续存储区域分块

  • 划分基本块
    找首指令👉第一个首指令到第二个前即基本块
    1⃣️第一个指令2⃣️跳转指令的目标指令
    3⃣️跳转指令之后的一个指令

  • 画流图👉找连接基本块的边
    1⃣️跳转语句直接画
    2⃣️两个基本块挨着 且前面结尾没有无条件跳转

  • 代码优化
    三个原则👉等价 有效 合算
    1⃣️窥孔优化👉滑动窗口
    删除冗余存取 常量合并 常量传播 代数化简
    控制流优化 死代码删除 强度削弱
    使用目标机惯用指令
    2⃣️局部优化👉在基本块范围内
    👉基本块作为窗口的窥孔优化
    常量合并 常量传播 删除公共子表达式
    复写传播 删除无用赋值 代数化简
    3⃣️循环优化👉循环内的代码
    代码外提 删除归纳变量
    4⃣️全局优化👉整个程序过程
    👉跨越多个基本块
    常量合并 常量传播 删除公共子表达式
    …同2⃣️

  • 目标代码生成
    指令选择👉寄存器分配👉指令调度

  • 中间代码
    逆波兰👉运算对象写前面 运算符号写后面
    三元式👉列表 序号(运算符 对象1 ,对象2)
    四元式👉列表(符op,arg1,arg2,结果t1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值