有一种语言由无上下文语法定义,其生成规则如下:
E -> T + E | T
T -> F * T | F
F -> (E) | C
C -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
在这个语法中,非终端 E,T,F,和 C ;终端是括号,加号,星号和数字; E 是开始符号。以下哪项显示表达 7 + 3 *(6 + 4)是该语言的一个句子?
(a) E -> 7 + 3 * (F + T) (c) E -> 7 + 3 * (T)
(b) E -> 7 + 3 * E (d) E -> 7 + T * (E)
我派生选项(d)但正确的答案是选项(a)。为什么?请解释。谢谢
答案 0 :(得分:2)
提出的问题定义不明确,因为不清楚选项(例如这四个中的一个)对“显示”表达式是否在语言中意味着什么。
我对问题的最佳猜测是忽略“E - >”在每个选项中,并询问四个中的哪一个是可能出现在给定句子的推导中的句子形式。
你可以把它分成两个问题:(1)哪些是句子形式(即,可以从E
派生的形式),以及(2)那些派生出给定句子?< / p>
在步骤(1)中,您可以消除(b)和(d):
重新(b),如果您尝试派生7 + 3 * E
,则可以转到7 + 3 * T
,但T
不会导出E
re(d),如果您尝试派生7 + T * (E)
,则可以转到7 + F * (E)
,但F
不会派生T
。
在步骤(2)中,您删除(c),因为虽然7 + 3 * (T)
可以从E
派生,但T
不会派生6+4
。
所以答案是(a),因为7 + 3 * (F + T)
可以从E
派生,F
可以派生6
,而T
可以派生{ {1}}。