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

前置知识

  • 句型:若文法 G 的开始符号为 S,则从开始符号 S 能推导出的符号串称为文法的一个句型
  • 句子:若 X 是文法 G 的一个句型,且 XVTX∈V^*_T,则称 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}(话说这个推导符号也是真难打出来。。。),表示至少推导0次
  • 1步或多步推导:符号为 +G\underset{G}{\overset{+}\Rightarrow},表示至少推导一次
  • 最左推导:总是选择每个句型的最左非终结符进行替换
  • 最右推导:也称为规范推导,总是选择每个句型的最右非终结符进行替换

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

归约

归约是推导的逆过程。

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章