基础概念
- 短语: 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,在语法树中就可以这样表示:
-
给定句型:T * i ↑ (T * F)
-
给定文法G[T]:
T → T * F | F
F → F ↑ P | P
P → (T) | i
语法树如下:
- 短语
- 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,存在下列两个不同的语法树:
所以该文法G(S)具有二义性。