(2017/3/20)现代编译原理C语言描述(虎书)chapter 3学习笔记

来源:互联网 发布:js倒计时5分钟代码 编辑:程序博客网 时间:2024/04/28 13:58

Section3.3: LR分析

  • LL(k)分析技术的一个弱点是,它在仅仅看到右部的前k个单词时就必须预测要使用的是哪一个产生式
  • 更有效的方法:LR(k)分析,它可以将这种判断推迟至已看到与正在考虑的这个产生式的整个右部对应的输入单词以后(多于k个单词)
  • LR(k)代表从左至右分析、最右推导、超前查看k个单词
  • 该分析器有一个栈和一个输入,输入中的前k个单词为超前查看的单词
  • 移进:将第一个输入单词压入至栈顶
  • 规约:选择一个文法规则X->ABC,依次从栈顶弹出C、B、A,然后从X压入栈
  • 将栈和输入合并起来形成的一行总是构成一个最右推导

Section3.3.1: LR分析引擎

  1. 查看栈顶状态和输入符号,从而得到相应的工作
  2. sn:移进到状态n
  3. gn:转换到状态n
  4. rk:用规则k规约
  5. a:接收
  6. :错误(用表中的空项表示)

Section3.3.2:LR(0)分析器生成器

  1. 在实际中,编译器并不使用k>1的表,在一定程度上是因为这个表十分巨大,但更主要的是因为程序设计语言可以用LR(1)文法来描述
  2. LR(0)文法是一种只需查看栈就可进行分析的文法,它的移进/规约判断不需要任何超前查看
  3. 使用文法3-8来举例说明LR(0)分析器的生成过程
    这里写图片描述
  4. 输入以S开始意味着它可能以产生式S的任何一个右部开始,状态1
    这里写图片描述
  5. 文法规则与指出其右部位置的原点组合在一起称为项(item)
  6. 移进动作(shift action)
    移进x:
    这里写图片描述
    移进一个左括号:
    这里写图片描述
  7. 转换动作(goto action)
    这里写图片描述
  8. 规约动作(reduction action):closure and goto
    这里写图片描述
  9. LR(0)分析器和分析表
    这里写图片描述
    这里写图片描述

Section3.3.3:SLR 分析器的生成

#####未完待续

0 0
原创粉丝点击