2.4 短 语 、 直 接 短 语 和 句 柄
2.4.1 短语和直接短语
令 G 是一个文法, S 是文法的开始符号,假定 αβδ 是文法 G 的一个句型,如果有
S ⇒* αAδ且 A ⇒+ β
则称 β 是相对于非终结符 A 的句型 αβδ 的短语。特别是,如果有
S ⇒* αAδ且 A ⇒ β
则称 β 是直接短语。
注意体会短语这个概念的定义,仅有 A ⇒+ β ,不一定意味着 β就是句型 αβδ 的一个短语,因为,还需要有 S ⇒* αAδ这一个条件。
例如,考虑文法 G [ N 1 ]:
N 1 → N
N → ND | D
D →0|1|2
对句型 ND ,尽管有 N 1 ⇒+N ,但 N 不是该句型的一个短语,因为不存在从文法的开始符号 N 1到 N 1 D 的推导。事实上,句型 ND 的短语是 ND 自身。
需要指出的是,短语和直接短语的区别在于第二个条件,直接短语中的第二个条件表示有文法规则 A → β ,因此,每个直接短语都是某规则右部。
2.4.2 句柄
一个句型的最左直接短语称为该句型的句柄。
句柄特征:
(1 )它是直接短语,即某规则右部。
(2 )它具有最左性。
注意,短语、直接短语和句柄都是针对某一句型的,特指句型中的哪些符号子串能构成短语和直接短语,离开具体的句型来谈短语、直接短语和句柄是无意义的。
【例 2.13 】
设有文法
G [ S ] = ({ S , A , B },{ a , b }, P , S )
其中,P 为
S → AB
A → Aa | bB
B → a | Sb
求句型 baSb 的全部短语、直接短语和句柄。
分析 根据短语定义,可以从句型的推导过程中找出其全部短语、直接短语和句柄。
对文法,首先建立该句型的推导过程:
S ⇒ AB ⇒ bBB ⇒ baB ⇒ baSb (最左推导)
S ⇒ AB ⇒ ASb ⇒ bBSb ⇒ baSb(最右推导)
从这两个推导过程中,有
① S ⇒* S
S ⇒+ baSb
句型本身是(相对于非终结符 S )句型 baSb 的短语。
②
S ⇒* baB
B ⇒ Sb
句型 baSb 中的子串 Sb ,是(相对于非终结符 B )句型 baSb 的短语,且为直接短语。
③ S ⇒* bBSb
B ⇒ a
句型 baSb 中的子串 a ,是(相对于非终结符 B )句型 baSb 的短语,且为直接短语、句柄。
④ S ⇒* ASb
A ⇒+ ba
句型 baSb 中的子串 ba ,是(相对于非终结符 A )句型 baSb 的短语。
对于此句型,再没有其他能产生新的短语的推导了。可见,根据定义求句型的短语、直接短语和句柄比较麻烦、难求。下一节通过对语法树的介绍可以看到,用语法树来求句型的短语、直接短语和句柄是非常直观和简单的。
如有侵权请联系我删除。
欢迎大家关注我哦!