问题 单项选择题

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

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是开始符号,那么,此文法是 (1) 文法。这种文法的语法分析通常采用优先矩阵。优先矩阵给出了该文法中各个终结符之间的优先关系(大于、小于、等于和无关系)。在上述文法中,某些终结符之间的优先关系如下:b (2) a;f (3) g;a (4) a;d (5) d。

5()

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…”的产生式,且有或者“A[*]b...”或者“A[*]…aB”时,a>b;

当且仅当G中有形如“U→…Ab…”的产生式,且有或者“A[*]a…”或者“A[*]…aB”时,a>b。

如果算符文法G的任何一对终结符号之间,至多只有3种算符优先关系——等于、大于或者小于——成立,则称G为算符优先文法。

单项选择题
单项选择题