程序设计语言的大多数语法现象可以用CFG (上 下文无关文法)表示。下面的CFG

资格题库2022-08-02  32

问题 程序设计语言的大多数语法现象可以用CFG (上 下文无关文法)表示。下面的CFG产生式集用于描述简单算术表达式,其中+、-、*表示加、减、乘运算,id表示单个字母表示的变量,那么符合该文法的表达式为(  )。P:E→E+T|E-T|TT→T*F|FF→-F|idA.a+-b-cB.a*(b+c)C.a*-b+2D.-a/b+c

选项 A.a+-b-c
B.a*(b+c)
C.a*-b+2
D.-a/b+c

答案 A

解析 根据本题的语法推导式,可以发现,这里没有终结符“(”、")"、"/",因此选项B和D错误。
在推导的过程中,会发现"*"只能通过T推导,此时必定经过了E+T或E-T,也就是说“+”或“-”必定在“*”前面。因此C错误。
只有A能够被推导,推导过程如下:
(1)通过E→E-T,从起始符E得到E-T;
(2)通过E→E+T,将上面的E展开为E+T,得到E+T-T;
(3)通过E→T→F→id→单个字母a;
(4)通过T→F→-F→-id→单个字母-b;
(5)通过T→F→id→单个字母c。
综上,可以从起始符E得到a+-b-c,即为A选项。
转载请注明原文地址:https://www.tihaiku.com/congyezige/2409343.html

最新回复(0)