<编译原理>短语、直接短语及句柄

语法树短语、简单短语和句柄的方法是:

1)每个句型都有一棵语法树;

2)每棵语法树的叶(从左到右)组成一句型;

3)每个子树 的叶(从左到右)组成一短语;

4)每个简单子树 的叶(从左到右)组成一简单短语;

5)最左简单子树 的叶(从左到右)组成一句柄。


2017.12.10更:

个人理解,如有不完备之处,欢迎指正:短语就是某节点延伸之后所能形成的句子,比如下例第三行的T,先序遍历以T为根节点的子树,得到的是Sd(T);直接短语就是,某个节点,其所有子节点都是叶子结点,比如说第三行的S、第四行的T、第四行的S,所以直接短语有b、S、(T);而句柄就是最靠左的直接短语,怎么判定这个最靠左呢?先序遍历整棵树,最先碰到的直接短语就是最左的



[例]假设某程序语言的文法如下:
S→a|b|(T)
T→TdS|S
其中:Vt={a,b,d,(,)},Vn={S,T},S是开始符号。
考查该文法,称句型(Sd(T)db)是S的一个A。其中B是句柄;C是素短语;D是该句型的直接短词;E是短语。
供选择的答案
A:①最左推导 ②最右推导 ③规范推导 ④推导
B:①S ②b ③(T) ④Sd(T)
C:①S ②b ③(T) ④Sd(T)
D:①S ②S,(T),b
③S,(T),TdS,b ④(Sd(T)db)
E:①(Sd(T)db) ②d(T) ③Td ④Sd(T)d
【解析】

              S   
         /     |     \   
       (      T     )   
           /    |   \   
        T     d     S   
    /   |   \           |   
  T   d    S       b   
  |           /|\   
  S       ( T )   

一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语,当子树中不包含其他更小的子树时,该子数叶结点所组成的字符串就是该句型的直接短语。
因此本题的直接短语的为 S 、(T)、b,短语有S、(T)、b、Sd(T)、Sd(T)db 、(Sd(T)db)。d不是直接短语,因为d所在的树还有子树所以它不是!
一个句型的最左直接短语称为该句型的句柄 素语是一个短语,它至少含有一个终结符,而且除它自身以外不再含有更少的素短语,对于句型(Sd(T)db)的素短语是(T)、b.

 

解答本题要搞清楚基本概念,下面具体分析各个问题。
先来看问题A。最左(右)推导:任何一步推导过程σ→β(其中σ、β是句型)都是对σ中的最左(最右)非终结符进行替换,这种推导为最左(最右)推导。在形式语言中,最右推导常被称为规范推导。
题中的句型(Sd(T)db)的第一步肯定是由S→(T)→(TdS)得出的。按照最左推导的规则(Tds)→(TdSdS)→(SdSdS),最终不可能推出原来的句型。?
按照最右推导的规则(Tds)→(Tdb)→(Td(T)db),最终不可能推出原先的句型。
最后可以看出句型(Sd(T)db)是由一般推导推出的,步骤如下:
S→(T)→(Tds)→(Tdb)→(Td(T)db)→(Sd(T)db)
所以正确答案是④。
再来看问题B~E。来文法,S是文法的开始符号,αβδ是文法G的一个句型。如果有S→αAδ,且A→β,则称β是句型αβδ相对于非终符A的短语。特别是如有A?β,则称β是句型αβδ相对于规则A→β的直接短语。一个句型的最左直接短语称为该句型的句柄。
本文法推导树见上:
所以,S是句型相对于规则T→S的直接短语,也是最左直接短语(句柄)。(T)是句型相对于规则S→(T)的直接短语,对于问题B,选择①是正确的。
素短语是一个短语,它至少包含一个终结符,并除自身外不包含其他的素短语。所以,问题C的答案③正确
d是句型相对于规则S→d的直接短语,则问题D的答案②正确。
由推导树可知,无论如何,无法由S推导出d(T)、Td或Sd(T)d,所以问题E的答案①正确。
【答案】: A:④ B:① C:③ D:② E:①

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值