假设某程序语言的文法如下: S→SaT|T T→TbR|R R→PdR|P P→fSg|e 其中Vr={a,b,d,e,f,g};Vn={S,T,R,P};S是开始符号,那么,此文法是(43)文法。这种文法的语法分析通常采用优

admin2019-03-04  30

问题 假设某程序语言的文法如下:
   S→SaT|T
   T→TbR|R
   R→PdR|P
   P→fSg|e
   其中Vr={a,b,d,e,f,g};Vn={S,T,R,P};S是开始符号,那么,此文法是(43)文法。这种文法的语法分析通常采用优先矩阵。优先矩阵给出了该文法中各个终结符之间的优先关系(大于、小于、等于和无关系)。在上述文法中,某些终结符之间的优先关系如下:b{(44)}a;f{(45)}g;a{(46)}a;d{(47)}d。

选项 A、大于
B、小于
C、等于
D、无关系

答案B

解析 所谓算符文法,可以描述如下:如果在一个文法G中,不含有形如“U→…AB…”的产生式,其中A,B∈Vn,则G为算符文法。也就是说,如果G是算符文法,那么G的任何产生式的右部都不会出现两个非终结符号相邻的情况,而且,对算符文法而言,也不会产生两个非终结符号相邻出现的句型。这种性质意味着,如果把终结符号看做广义运算符,而把非终结符号看做广义运算的对象,则在算符文法的任何句型中,两相邻运算符之间的运算对象至多只有一个,而不会出现其间运算对象个数不确定的情况。这样就使得广义运算总是按照中缀形式出现的,对语法分析工作非常有益。
   对于给定的文法G,可以逐个检查G的各产生式,查看它们的右部是否含有相邻出现的非终结符号,以确定G是否为算符文法,然后再构造相应的优先矩阵。若此矩阵中无多重定义的元素(即各运算符对之间至多只有一种优先关系),则可确认为算符优先文法。
   在算符文法中,一般按照如下规则判断终结符之间的优先关系:
   当且仅当G中有形如“U→…ab…”或者“U→…aBb…”的产生式,a=b
   当且仅当G中有形如“U→…aA…”的产生式,且有或者“Ab...”或者“A…aB”时,a>b;
   当且仅当G中有形如“U→…Ab…”的产生式,且有或者“Aa…”或者“A…aB”时,a>b。
   如果算符文法G的任何一对终结符号之间,至多只有3种算符优先关系——等于、大于或者小于——成立,则称G为算符优先文法。
转载请注明原文地址:https://jikaoti.com/ti/FBx7FFFM
0

相关试题推荐
最新回复(0)