编译原理与实践 学习笔记

学习资料:中科大视频https://www.bilibili.com/video/av32233569/?p=1

教材《编译原理与实践》

正则表达式

  • 定义:选择、连接、闭包

有限状态自动机

  • 分类
    • 不确定有限状态自动机(NFA):下一个状态可能有多个
    • 确定有限状态自动机(DFA):下一个状态只有一个
  • 信息
    • 两个圈:接收状态
  • 目的:
  • 从RE→NFA(汤普森算法,递归、子结构)
    • e1e2
    • e1|e2
  • NFA→DFA(子集构造法)
    • 算法描述:从起始状态出发,读入任意一个字符所能到达的所有状态,类似宽度优先搜索算法
    • 算法性质
      • 可终结性

上下文无关文法

  • 非终结符:大写字母
  • 终结符:小写字母
  • 最左推导、最右推导
  • 分析树(parsing tree)
    • 特点:分析树的形状和推导的顺序无关
    • 后序遍历

语法分析

  • 自顶向下分析
  • LL(1):从左到右,最左推导,用1个辅助
  • LL(1)分析表:指导当前栈顶元素应该如何转换
  • First(N) = 从非终结符N开始推得出的所有句子开头可能的所有终结符
  • First(N)的不动点算法,先求得所有的NULLABLE集合,然后枚举,直到某个β∉NULLABLE,那么First(N)并就到β为止
  • follow(N)的不动点算法
    • 逆序来求,如果当前可为空,那么累计并,否则清空
  • 判断是不是LL(1) , 一个非终结符到终结符,表格只能有一个内容。即一个非终结符的某个follow终结符,只能通过一条式子得到
  • 优点:算法时间复杂度线性
  • 缺点:分析文法类型受限,可能需要文法改写
  • NULLBALE:通过推导能得到空的所有非终结符集合

LR(0)自底向上分析

  • 归约:从产生式右边 → 左边 
  • 本质:是最右推导的逆过程,利用了有记忆能力的DFA
  • 点记号:点的左边都被读入,点的右边还没读入
  • 实现关键
    • 何时规约?何时移进?
  • 算法画图思想:
    • 有点记号的都是项目,每个状态由若干个项目集组成。
    • 如果点记号后面是一个非终结符,那么多一条项目
    • 图对应LR(0)分析表
  • SLR算法:LR(0)的改进

抽象语法树

语义分析

  • 目标:检查抽象语法树语义上是否合法的??
全部评论

相关推荐

11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务