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


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

其中编译原理中的短语,直接短语,句柄的定义参见博文:
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

发布了72 篇原创文章 · 获赞 106 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_43543789/article/details/104818368