从供选择的答案中,选出应填入下面叙述中{ }内的最确切的解答,把相应编号写在答卷的对应栏内。?
假设某程序语言的文法如下:?
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:①?
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9460545/viewspace-1001987/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9460545/viewspace-1001987/