软件设计师(四)编译原理-语法推导树

语法推导树

回顾:语法G={Vn,Vt,P,S}

Vn和Vt都是V,Vn为非终结符,Vt为终结符

P为推导式,S为开始符

视频地址

一棵语法树应具有以下特征

  1. 每个节点都有一个标记,此标记是V的一个符号;

    理解:每个节点都有一个名称,要么是非终结符,要么是终结符

  2. 根的标记是S

    理解:根为起始符,即为S

  3. 若一结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在Vn中

    理解:一个节点他有子孙的话,那它A应该就不是终结符,因为终结符不能推出β,A肯定属于Vn

  4. 如果结点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的直接短语(简单短语)
  • 一个句型的最左直接短语称为该句型的句柄。

简单理解:

  1. S经过若干推导,得到aAc,然后A又经过若干推导得到b,则b为A的短语,例如下图,S=>A,A->a1,所以a1为A的短语。
  2. 如果,A只有一个子结点,即A->b,则b是A的直接短语
  3. 最左边的直接短语就是句柄

例子:一个上下文无关文法生成句子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,所以不是直接推出,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值