回 帖 发 新 帖 刷新版面

主题:有关文法的几个老问题,请高手帮忙!

有关文法的几个老问题,请高手帮忙!

假设某程序语言的文法如下:


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




其中:vt={a,b,d,(,)};vn={s,t};s是开始符号,求句型(sd(t)db)是s的一个 推导 ,其中 s 是句柄, (t) 是最左素短语(问题一:素短语又是什么?)



直接短语:s、(t)、b       (问题二:TdS为什么不是直接短语?)



短语:(sd(t)db)、sd(t)db、sd(t)、(t)、s、b       (问题三:a为什么不是短语?)


再说明一点,这个推导不是最右推导。



此句型的语法树如下所示:

          S 

         (T) 

     (T  d   S)

   (T  d  S   b)  [color=FF0000](为什么不是TdSdb)?[/color]
  (S   (T))  [color=FF0000](为什么不是Sd(T)db)?)[/color]



从语法树我们可以看出,短语就是位于同一个非终端结点的所有叶子结点,比如S、Sd(T)、Sd(T)db就是是相对于T的短语,b、(T)、(Sd(T)db)是相对于S的短语。而直接短语则进一步要求这些叶子结点的非终端结点是它们的直接父结点。因此可以S、(T)、b都是该句型的直接短语。语法树上最左的直接短语就是句柄,本题中是S。




[color=FF0000]
问题一:素短语又是什么?怎么判断的?


问题二:TdS为什么不是直接短语?


问题三:a为什么不是短语?)


问题四:语法树到底怎么写的?看这题的语法树似乎不全??[/color]





几个问题,希望高手帮助,谢谢!

回复列表 (共2个回复)

沙发

有人能帮我回答下这问题吗?或者指点下啊!谢谢先了!

板凳

似乎程序员专区回答问题的人比较少啊?在c语言那很多热心帮忙的人,这里怎么没人理我啊!

我来回复

您尚未登录,请登录后再回复。点此登录或注册