编译原理 - 推导与归约(一)

推导与归约

前置知识

  • 句型:若文法 G 的开始符号为 S,则从开始符号 S 能推导出的符号串称为文法的一个句型
  • 句子:若 X 是文法 G 的一个句型,且 X ∈ V T ∗ X∈V^*_T XVT,则称 X 是文法 G 的一个句子,即仅含终结符的句型是一个句子

例如,有下列文法:

  • S→AB
  • A→aA|a
  • B→bB|b

用上述文法推导字符串aaabbb过程如下:

S→AB→aAB→aaAB→aaaB→aaabB→aaabbB→aaabbb

AB、aAB、aaAB、aaaB、aaabB、aaabbB 和 aaabbb 都是上述文法的一个句型,但只有 aaabbb 为一个句子,因为其只含有终结符。

推导

推导:用产生式的右部替换产生式的左部

主要分为以下几种推导:

  • 直接推导:对于每一个产生式来说,右部都是它左部的直接推导,记为 α⇒β。
  • 0步或多步推导:符号为 ⇒ ∗ G \underset{G}{\overset{*}\Rightarrow} G(话说这个推导符号也是真难打出来。。。),表示至少推导0次
  • 1步或多步推导:符号为 ⇒ + G \underset{G}{\overset{+}\Rightarrow} G+,表示至少推导一次
  • 最左推导:总是选择每个句型的最左非终结符进行替换
  • 最右推导:也称为规范推导,总是选择每个句型的最右非终结符进行替换

对每一个句型,该句型一定有一个推导过程(可能不唯一),推导过程一定对应一颗语法树(推导过程可能不唯一,当然语法树也可能不唯一)。

归约

归约是推导的逆过程。

  • 直接归约:若文法 G 中有一个直接推导 α⇒β,则称 β 可直接归约为 α,或 α 是 β 的一个直接归约
  • 归约:若文法 G 中有一个推导 α ⇒ ∗ G \underset{G} {\overset{*}\Rightarrow} G β,则称 β 可归约成 α,或 α 是 β的一个归约
  • 最左归约:也称为规范归约,最右推导的逆过程称为最左归约
  • 最右归约:最左推导的逆过程称为最右归约

下面以两幅图片作为示例说明推导与归约的过程。
最左推导
最右推导

  • 30
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值