使用给定的上下文无关语法规则导出给定的解决方案

时间:2017-01-14 00:21:28

标签: compiler-construction context-free-grammar

有一种语言由无上下文语法定义,其生成规则如下:

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)。为什么?请解释。谢谢

1 个答案:

答案 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}}。