zoukankan      html  css  js  c++  java
  • 编译原理

    <<编译原理>> 

    阅读如下书籍

      <<编译原理>> 

      第二版

      何炎祥 主编

      华中科技大学出版社

    此书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利用这个规则, 移进优于规约

      规约-规约冲突

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

      结合特性

      

  • 相关阅读:
    redis的发布订阅模式pubsub
    django集成celery之callback方式link_error和on_failure
    linux命令和awk
    使用beanstalkd实现定制化持续集成过程中pipeline
    JavaScript实现模糊推荐的input框(类似百度搜索框)
    hadoop streaming编程小demo(python版)
    一个scrapy框架的爬虫(爬取京东图书)
    mongodb生产环境(副本集模式)集群搭建配置
    TensorFlow加载图片的方法
    STC15W408AS简单使用教程-简单的光强检测!
  • 原文地址:https://www.cnblogs.com/lpthread/p/5113809.html
Copyright © 2011-2022 走看看