📜  门| GATE-CS-2006 |第58章

📅  最后修改于: 2021-06-28 20:59:50             🧑  作者: Mango

请考虑以下语法:

S → FR
R → S | ε
F → id

在语法的预测分析器表M中,条目M [S,id]和M [R,$]分别存在。
(A) {S→FR}和{R→ε}
(B) {S→FR}和{}
(C) {S→FR}和{R→* S}
(D) {F→id}和{R→ε}答案: (A)
说明:这里将解析表表示为M [X,Y],其中X代表行(非终端),Y代表列(终端)。

以下是填充解析表的规则。

对于语法的每个不同的生成规则A->α,我们需要应用给定的规则:

规则1 :如果A –>α为乘积,则对于FIRST(α)中的每个末端’a’,将A–>α添加到M [A,a]

规则2 :如果’ε’在FIRST(α)中,则对FOLLOW(A)中的每个’b’在M [A,b]中添加A –>α。

由于已经询问了与非终端S和R相对应的条目,因此我们只需要考虑它们的产生即可得到答案。

对于S→FR ,根据规则1,应将此生产规则放在条目M [S,FIRST(FR)]处,并根据给定的语法FIRST(FR)= {id},因此S-> FR为放在分析表中的条目M [S,id]处。

相似地,

对于R→S,此生产规则应放在条目M [R,FIRST(S)]上,并且当FIRST(S)= FIRST(F)= {id}时,R-> S放在条目M [ R,id]

对于R->ε ,由于FIRST(ε)= {ε},因此应应用规则2,因此,应将此生产规则放在解析表中的条目M [R,FOLLOW(R)]和FOLLOW( R)= FOLLOW(S)= {$},因此R->ε放在条目M [R,$]处。

因此,答案是选项A。

访问以下链接以了解如何查找第一组和第二组。

http://quiz.geeksforgeeks.org/compiler-design-first-in-syntax-analysis/
http://quiz.geeksforgeeks.org/compiler-design-follow-set-in-syntax-analysis/
这个问题的测验