一、关于短语
书上的定义如下:
书上写的比较抽象,我这里简单解释一下,有两个文法,分别是:
1 S=*=>aAp (由于部分字符难以输入,在此用a,b,p代替)
2 A=+=>b
我们由此可以画出他的抽象语法树,如下:
那么,abp,b为此句型的短语 。
总结来说:一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语,由这概念,那么我们自然可以想到,b也应该是该句型的一个短语。
二、关于直接短语
子树中不再包含其他的子树,即A只能推导出b,而b不能再推出其他的式子,则b为此句型的直接短语。
三、关于句柄
直接短语中的最左直接短语为该句型的句柄。
四、小练习
-
S -> a|b|(T)
-
T -> TdS|S
-
证明(Sd(T)db)是S的一个句型,并求出短语,直接短语,句柄。
-
此文法的抽象语法树为:
由此可得S=(Sd(T)db)为此文法的一个句型:
短语:S,(T),b,Sd(T),Sd(T)db,(Sd(T)db)
直接短语:S,(T),b
句柄:S
重点从这看
如何找直接短语呢?
画出语法树,从左至右把所有子树的叶子结点写出来,就是短语,直接短语就是找深度为1的的子树的叶子结点
这道题中:从左至右的子树有T,T,S,S,T,S
- 短语:S,Sd(T),(T),(Sd(T)db),Sd(T)db,b
分别对应:
-
T->S
-
T->Sd(T)
-
S->(T)
-
S->(Sd(T)db)
-
T->Sd(T)db
-
S->b
2.直接短语找深度为1的子树
- 直接短语:S,(T),b
看图
-
直接短语中的最左直接短语为该句型的句柄。
- 句柄:S
-
素短语:首先是短语,至少包含一个终结符,并且除自身外不包含其他素短语,最左边的素短语就是最左素短语
素短语:(T),b
最左素短语:(T)