《编译原理》 预习复习

编译原理

王道论坛bilibili
原创总结

基础知识

文法

词法分析

理论模型

  • 正规文法
  • 有限自动机

实现

  • 词法分析程序

语法

理论模型

  • 自下而上

    • 下推自动机
  • 自上而下

    • 优先分析
    • LR分析

实现

  • 递归下降分析法
  • YACC

中间代码生成

语法制导翻译

  • 三元式
  • 四元式

运行时的数据区管理

栈式存储结构

  • 顺序

    • 数据区
    • cpp 建立活动记录
      • top :临时工作单元
      • 内情向量
      • 简单变量
      • 参数列表 所占的大小 N个
      • 参数个数
      • 返回地址
      • *sp:老SP
  • 嵌套过程 递归

    • 层次显示表 display表

      • 只允许直系的调用
      • 抄写父亲 display 表
      • 加上自己的sp
    • 建立display表

  • 子主题 3

堆 存储管理

  • 对象 全局的

    • 碎片化
  • 对策

    • 分配

      • 固定长块管理

        • 固定划分、链表回收 再利用
      • 可变长块

        • 固定划分没用完 内部碎片:原因

        • 搜词匹配 堆管理策略

        • 最优匹配

          • 遍历查找最优 速度慢
        • 最差匹配

          • 最大的一块切掉
  • 释放

    • free

    • 无用单元的搜集

      • 碎片整理
      • 执行时机
      • 收集过程

代码优化

介绍

  • 复杂度

  • 级别

    • 语言
    • 算法
    • 中间代码级
    • 目标代码级
  • 实质

    • 精简代码 存储
  • 优化代价

    • 汇编 最优化的
    • 接近汇编即可

优化分类

  • 顺序
    局部优化

    • 拆解 删除公共子表达式
  • 循环优化
    全局优化
    关联参数 replace

    • 循环不变 代码外提

    • 降低运算强度 乘法变为加减

    • 变换循环控制变量 并删除自增赋值狮

      • for(int i=0;sum < 10;){}
  • 顺序
    基本块内的优化

    • 划分皆基本块

      • 顺序执行的 语句段 程序流图的框框
      • 四元程序 / 汇编样式
      • 子函数
    • 块内优化

  • 顺序
    基本块的DAG 表示

    • 定义 - 树的构建

      • 无环路有向图
      • 叶子节点 :参数
      • 内部节点:运算符
      • 附标 :赋值
    • 优化方法

      • 合并已知量
      • 删除无用赋值
      • 检查公众表达式
    • 自下而上还原回去 四元式子

    • 进一步优化

      • 删除无用赋值

        • 后面的代码用不到 变量
        • 节点不附带任何标识符 运算
  • 循环

    • 循环查找算法

      • 找到 程序流图 循环

      • 必经节点集

        • 入度
        • 迭代
      • DFS 深度为主的节点排序

      • 回边找循环

    • 控制流程分析

  • 全局优化

  • 循环优化

XMind - Trial Version

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code-keys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值