语法推导树
回顾:语法G={Vn,Vt,P,S}
Vn和Vt都是V,Vn为非终结符,Vt为终结符
P为推导式,S为开始符
一棵语法树应具有以下特征:
-
每个节点都有一个标记,此标记是V的一个符号;
理解:每个节点都有一个名称,要么是非终结符,要么是终结符
-
根的标记是S
理解:根为起始符,即为S
-
若一结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在Vn中
理解:一个节点他有子孙的话,那它A应该就不是终结符,因为终结符不能推出β,A肯定属于Vn
-
如果结点n的直接子孙,从左到右的次序是结点n1,n2,。。。nk,其标记分别是:A1,A2,…Ak,那么A->A1,A2…,一定是P中的一个产生式
理解:意思就是上往下推导,父节点推导出子孙节点
1.1 语法推导树
例题1:
文法G=({a,b},{S,A},S,P),其中:
S->aAS|a
A->SbA|SS|ba
请构造句型aabAa的推导树
解答:
1、做这个题,首先把推导分开列出来:
S->aAS;
S->a;
A->SbA;
A->SS;
A->ba
2、根据句型aabAa开始分析,起始符都要为S,有两个选择,
- S->aAS;
- S->a;
因为后面有一长串,所以不能选第二个,只能是S->aAS,写出结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ErfbzKma-1617182072980)(C:\Users\Lonelylie\AppData\Roaming\Typora\typora-user-images\image-20210331165002020.png)]
3、这样就得到了a,然后在看a后还有abAa,继续分析,从A开始
- A->SbA;
- A->SS;
- A->ba
有三个,因为需要得到a,尝试第一个,A->SbA;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8SsI02pj-1617182072981)(C:\Users\Lonelylie\AppData\Roaming\Typora\typora-user-images\image-20210331165130619.png)]
从A出发得到SbA,后面一直分析,得出的结果从左往右看叶子节点即可
1.2 短语、简单短语、句柄
令G是一个文法,S是文法的开始符号,abc是文法G的一个句型。
- 如果右S=>* aAc,且A=>+ b,则称b是句型abc相对于非终结符A的短语。
- 特别是,如果A=>b,则称b是句型abc相对于规则A=>b的直接短语(简单短语)
- 一个句型的最左直接短语称为该句型的句柄。
简单理解:
- S经过若干推导,得到aAc,然后A又经过若干推导得到b,则b为A的短语,例如下图,S=>A,A->a1,所以a1为A的短语。
- 如果,A只有一个子结点,即A->b,则b是A的直接短语
- 最左边的直接短语就是句柄
例子:一个上下文无关文法生成句子abbaa的推导树如图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hhxMlWyn-1617182072982)(C:\Users\Lonelylie\AppData\Roaming\Typora\typora-user-images\image-20210331170435236.png)]
解答:
短语就是任意一个子树的叶子序列,对于A、S子树,a1就是短语,a2,a3也是
对于B子树,∑、b1、b2也是短语
直接短语就是直接推出的,只有一个子结点,A->a1,S->∑,B->b2,A->a2,这些例子都是
而S->a3则不是短语,因为还有另一个子树A->a2,所以不是直接推出,
直接短语就是直接推出的,只有一个子结点,A->a1,S->∑,B->b2,A->a2,这些例子都是
而S->a3则不是短语,因为还有另一个子树A->a2,所以不是直接推出,