编译原理中:短语,直接短语,句柄

这几天邻近期末,感受上了快一学期的编译原理的许多方面仍是难以理解,今天早上就忽然遇到了一道题,求短语,直接短语和句柄的题,忽然才发现本身连这些词的定义都不清楚,因而仔细查了如下,下面分享出来:php

短语

书上的定义以下:
这里写图片描述html

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

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

咱们由此能够画出他的抽象语法树,以下:svg

这里写图片描述

那么,abp为此句型的短语
总结来讲:一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语,由这概念,那么咱们天然能够想到,b也应该是该句型的一个短语。spa

直接短语

书中的定义:3d

这里写图片描述

书中的意思总结来讲,指的是若是子树中再也不包含其余的子树,即A只能推导出b,而b不能再推出其余的式子,则b为此句型的直接短语code

句柄

先来看一下书中的定义:xml

这里写图片描述

书中的意思就是:直接短语中的最左直接短语为该句型的句柄htm

小练习

这里写图片描述

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

抽象语法树以下:

这里写图片描述

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

  • 短语: T*F, E+T*F

  • 直接短语:T*F

  • 句柄:T*F

简析:对于子树T来讲,其全部叶子节点为:T*F,对于E来讲,其全部叶子节点为:E+T*F故短语为 T*F 和 E+T*F

这个比较简单,咱们来个比较复杂的题目:

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

本文固定连接:http://blog.dreamchasinger.cn/?p=635
欢迎访问个人自建博客:http://blog.dreamchasinger.cn/
参考:http://blog.sina.com.cn/s/blog_733bf6e00100v1b2.html