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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值