什么是上下文无关文法、最左推导和最右推导—编译原理

30 篇文章 16 订阅
26 篇文章 2 订阅

系列文章戳这里👇

  1. 什么是上下文无关文法、最左推导和最右推导
  2. 如何判断二义文法及消除文法二义性
  3. 何时需要消除左递归
  4. 什么是句柄、什么是自上而下、自下而上分析
  5. 什么是LL(1)、LR(0)、LR(1)文法、LR分析表
  6. LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系
  7. 编译原理第三章习题
  8. 词法分析、构建DFA、上下文无关文法、LL(1)分析、提取正规式
  9. 证明LL(1)、SLR(1)、LALR(1)文法
  10. 翻译方案、属性栈代码

什么是上下文有关文法?

一、上下文无关文法

上下文无关文法就是说这个文法中所有的产生式左边只有一个非终结符,比如:
S → a S b S → a b S → aSb\\ S → ab SaSbSab
这个文法有两个产生式,每个产生式左边只有一个非终结符 S S S,这就是上下文无关文法,因为你只要找到符合产生式右边的串,就可以把它归约为对应的非终结符。

二、上下文相关文法

比如:
a S b → a a S b b S → a b aSb →aaSbb\\ S →ab aSbaaSbbSab
这就是上下文有关文法,因为它的第一个产生式左边有不止一个符号,所以你在匹配这个产生式中的 S S S的时候必需确保这个 S S S有正确的“上下文”,也就是左边的 a a a和右边的 b b b,所以叫上下文相关文法。

为什么需要上下文无关文法?

上下文无关文法重要的原因在于它们拥有足够强的表达力来表示大多数程序设计语言的语法;实际上,几乎所有程序设计语言都是通过上下文无关文法来定义的。另一方面,上下文无关文法又足够简单,使得我们可以构造有效的分析算法来检验一个给定字串是否是由某个上下文无关文法产生的。例子可以参见 L R LR LR 分析器和 L L LL LL分析器。

什么是最左推导和最右推导?

最左推导:每一步替换最左边的非终结符
最右推导:每一步替换最右边的非终结符
最右推导称为规范推导。最右推导对应于最左规约(规范规约)

举个例子

文法:
S → A B A → a ∣ t B → + C D C → a D → a S→AB\\ A→a|t\\ B→+CD\\ C→a\\ D→a SABAatB+CDCaDa
最右推导:
S → A B → A + C D → A + C a → A + a a → a + a a S→AB→A+CD→A+Ca→A+aa→a+aa SABA+CDA+CaA+aaa+aa
最左推导:
S → A B → a B → a + C D → a + a D → a + a a S→AB→aB→a+CD→a+aD→a+aa SABaBa+CDa+aDa+aa

  • 27
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之墨_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值