• 编译原理


    <<编译原理>> 

    阅读如下书籍

      <<编译原理>> 

      第二版

      何炎祥 主编

      华中科技大学出版社

    此书300多页, 比较剪短, 适合快速阅览, 不足的是有一些排版错误

    再次翻阅此书, 第7章是精华,  看懂第7章, 这本书就能了然于胸

    重点学习: 向前LR(LALR)分析表构造法

    LR(0)

    活前缀

      规范句型的一个前缀, 它不包含该句型的句柄右边的任何符号。

      之所以称为活前缀, 是因为它右边添加一些终结符之后总可以构成一个规范句型。

    拓广文法G'

      S' -> .S

    项目概念

      A -> xy 的项目是 A -> .xy  A -> x.y  A -> xy.

      A -> 空 的醒目是  A -> .

      直观的说, 项目是分析的某一时刻, 已经看到了产生式多少。

    CLOSURE(I)函数

      如果I是的任一项目集, 那么I的闭包CLOSURE(I)规则如下

      1: I 属于CLOSURE(I)

      2: 若 A -> a . Bb 属于CLOSURE(I), 且B -> r 是文法产生式, 则任何B -> .r也应加入到CLOSURE(I)

      3: 重复, 直至不在增大

    goto(I, X) 函数

      求接受X后的CLOSURE(I)

      如果I是某个活前缀r的有效项目, 则goto(I,X)是对活前缀rX有效的项目集

    项目集规范族

      起始是一个集合, 只有一个元素, CLOSURE(S' -> S)

      后面一直计算goto, 直到点都到了最右

    项目集的DFA

      将每个项目集族看成一个状态, 那么, goto函数就可以看作一个DFA

    构造LR(0)分析表的步骤小结

      1. 写拓广文法G'

      2. 写出G'的基本LR(0)项目

      3. 利用CLOSURE 和goto, 求出项目集规范族C

      4. 构造识别该文法全部活前缀的DFA

      5. 根据算法构造LR(0)分析表

    LR(0), SLR, LALR, LR(1)比较

    构造LALR分析表通用算法

      1. 构造LR(1)项目集族

      2. 如果不存在冲突动作, 就合并同心项目

      3. 如果合并后, 不存在规约规约冲突, 则按照合并后的集族构造分析表

    LR 文法是无二义的。

    冲突解决

      移进-规约冲突

        if else利用这个规则, 移进优于规约

      规约-规约冲突

        设定优先级, 前面的产生式优先级高

      结合特性

      

  • 相关阅读:
    LeetCode Array Easy 1. Two Sum
    关于VS2015 发布.net mvc 网站失败的问题
    2016计蒜之道复赛 百度地图的实时路况 floyd+cdq分治
    2016计蒜之道复赛 菜鸟物流的运输网络 网络流EK
    HDU5715 XOR 游戏 二分+字典树+dp
    HDU5697 刷题计划 dp+最小乘积生成树
    codeforces 687D Dividing Kingdom II 带权并查集(dsu)
    codeforces 687C
    codeforces 687B
    HDU 5693 D Game 区间dp
  • 原文地址:https://www.cnblogs.com/lpthread/p/5113809.html
Copyright © 2020-2023  润新知