编译原理-语法分析(自底向上)

本文深入探讨了编译原理中的LR语法分析,重点讲解了LR(0)、SLR(1)、LR(1)和LALR(1)分析器的工作原理。介绍了句柄、LR文法的概念,以及如何解决移入规约冲突,特别是通过向前看字符和展望符集来确定分析动作。此外,还讨论了如何消除LR文法的二义性以及处理语法错误。
摘要由CSDN通过智能技术生成

自顶向下解决该使用哪条产生式进行推导的问题
自底向上解决什么时候该移入,什么时候该规约的问题

核心问题

  • 什么时候移入,什么时候规约

通过action表执行相应的移入规约动作

  • 如何解决移入规约冲突

通过向前看一个字符,这个字符可以是非终结符的follow集,也可以是产生式的展望集

  • LR(0),SLR(1),LR(1),LALR(1)的关系

见 概念->LALR分析器与LR分析器

概念

句柄

“句柄”: “正确的待规约对象”,即它能保证被归约后一定还保持着最右句型

  • 短语,简单短语

在这里插入图片描述

  1. 一个短语,满足:被规约后,整个句子仍然保持最右句型。2.一个句型简单短语可能有多个,称最左简单短语为句柄
  • rm: 最右推导
  • 规范句型(最右句型):通过最右推导或最左规约得到的句型
  • 规范前缀:一个规范句型的前缀,且前缀后面不包括非终结符,如:
    在这里插入图片描述
  • 规范活前缀
    就是在栈中可能出现的前缀。
    满足:
    在这里插入图片描述
    如:
    在这里插入图片描述
    活前缀又分两种类型:归态活前缀、非归态(移入)活前缀

LR(k) 与LR文法

LR(k)

  • L 表示最左扫描,R表示反向构造出最右推导,k 表示最多向前看 k 个符号

LR文法:

  • 某一CFG能够构造一张分析表,使得表中每一元素至多只有一种 明确动作,则称改文法为LR文法
  • 并非所有CFG都是LR文法,但对于多数程序设计语言,一般 都可以用LR文法描述;和LL(1)相比,LR分析适应的文法范围要 广一些

不同的LR方法对CFG的要求不一样, 能够分析的CFG多少也不一 样, L R ( 0 ) ⊆ S L R ( 1 ) ⊆ L A L R ( 1 ) ⊆ L R ( 1 ) LR(0) \subseteq SLR(1) \subseteq LALR(1) \subseteq LR(1) LR(0)SLR(1)

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值