请考虑以下语法:
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/
这个问题的测验