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

语法树及其二义性

  • 基础概念
  • 语法树
  • 文法二义性

基础概念

  • 短语: S 为文法 G 的开始符号,αβδ 是该文法的一个句型。若 S ⇒ ∗ G α β δ S \underset{G}{\overset{*}\Rightarrow} αβδ SGαβδ A ⇒ + G β A\underset{G}{\overset{+}\Rightarrow}β AG+β,则称 β 是句型 αβδ 相对于非终结符 A 的短语。在语法树中,相当于子树的末端结点形成的符号串
  • 直接短语:又称简单短语。若 S ⇒ ∗ G α β δ S \underset{G}{\overset{*}\Rightarrow} αβδ SGαβδ,且有产生式 A → β A→β Aβ,则称 β 是句型 αβδ 相对于非终结符 A 的直接短语。在语法树中,相当于简单子树(只有一层分支的子树) 的末端结点形成的符号串.
  • 句柄:也称为最左直接短语,即直接短语中在语法树中位于最左边的为该句型的句柄
  • 素短语:是指一个短语至少包含一个终结符,并且除它自身之外不再包含其他素短语
  • 最左素短语:语法树最左边的素短语称为最左素短语

语法树

语法树,也称语法分析树,是针对上下文无关文法,用来表示一个句型的生成过程的一种描述手段,是推导的图形表示形式。
例如,对于产生式A→XYZ,在语法树中就可以这样表示:
编译原理 - 推导与归约(二)_第1张图片

  • 给定句型:T * i ↑ (T * F)

  • 给定文法G[T]:

T → T * F | F
F → F ↑ P | P
P → (T) | i

语法树如下:
编译原理 - 推导与归约(二)_第2张图片

  • 短语
    • i
    • T ↑ F
    • (T ↑ F)
    • i ↑ (T ↑ F)
    • T * i ↑ (T * F)
  • 直接短语
    • i
    • T * F
  • 句柄
    • i
  • 素短语
    • i
  • 最左素短语
    • i

文法二义性

如果一个文法存在某个句子对应两颗不同的语法树,则说这个文法是二义的。

不存在一个算法,能在有限步骤内,确切判定任给的一个文法是否为二义的。只要找到一个句子,该句子对应两个不同的语法树,即证明该文法是二义的。

例如,证明文法G(S)是二义的:

S→aB | Ad
A→ab
B→bd

对于句子abc,存在下列两个不同的语法树:
编译原理 - 推导与归约(二)_第3张图片
所以该文法G(S)具有二义性。

你可能感兴趣的:(编译原理)