编译原理之 短语&直接短语&句柄 定义与区分


叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!
在这里插入图片描述

其中编译原理中的短语,直接短语,句柄的定义参见博文:
https://blog.csdn.net/it_dream_er/article/details/53612006

一、关于短语

书上的定义如下:
在这里插入图片描述

书上写的比较抽象,我这里简单解释一下,有两个文法,分别是:

S=*=>aAp (由于部分字符难以输入,在此用a,b,p代替)
A=+=>b

我们由此可以画出他的抽象语法树,如下:
在这里插入图片描述
那么,abp为此句型的短语 。

总结来说:一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语,由这概念,那么我们自然可以想到,b也应该是该句型的一个短语。

二、关于直接短语

书中的定义:

在这里插入图片描述
书中的意思总结来说,指的是如果子树中不再包含其他的子树,即A只能推导出b,而b不能再推出其他的式子,则b为此句型的直接短语。

三、关于句柄

先来看一下书中的定义:
在这里插入图片描述
书中的意思就是:直接短语中的最左直接短语为该句型的句柄

四、小练习

1、练习一

在这里插入图片描述

如何证明E+T*F是句型呢?
最简单的方法就是画抽象语法树,如果能画出对应的抽象语法树,则就表明此表达式是文法的一个句型。

抽象语法树如下:
在这里插入图片描述

按如上的语法树可知,E=T*F为此文法的一个句型:

  • 短语: TF, E+TF

  • 直接短语:T*F

  • 句柄:T*F

简析:对于子树T来说,其所有叶子节点为:TF,对于E来说,其所有叶子节点为:E+TF故短语为 TF 和 E+TF

这个比较简单,我们下面来个比较复杂的题目。

2、练习二

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、利用语法树寻找句型的短语、直接短语、句柄方法

在这里插入图片描述

2、利用语法树寻找短语、句柄等方法总结

在这里插入图片描述

3、利用语法树寻找短语、句柄举例

(1)示例一:

在这里插入图片描述
(2)示例二:

在这里插入图片描述
在这里插入图片描述

Ending!
更多课程知识学习记录随后再来吧!

就酱,嘎啦!

在这里插入图片描述

注:
1、我们愈是学习,愈觉得自己的贫乏。 —— 雪莱
2、编译原理中的短语,直接短语,句柄的定义参见文章:https://blog.csdn.net/it_dream_er/article/details/53612006

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:撸撸猫 设计师:马嘣嘣 返回首页
评论 11

打赏作者

发芽ing的小啊呜

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值