考虑以下语法:
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 → ε}答案:(一)
说明:这里将解析表表示为 M[ X , Y ],其中 X 表示行(非终结符),Y 表示列(终结符)。
以下是填充解析表的规则。
对于语法中每个不同的产生式规则 A->α,我们需要应用给定的规则:
规则 1 :如果 A –> α 是产生式,则对于 FIRST(α) 中的每个终结点 ‘a’,将 A–>α 添加到 M[ A , a ]
规则 2 :如果 ‘ε’ 在 FIRST(α) 中,则为 FOLLOW(A) 中的每个 ‘b’ 添加 A –> α 到 M [ A , b ]。
由于条目已被要求对应于非终端 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。
访问以下链接以了解如何查找 First 和 Follow 集。
https://www.geeksforgeeks.org/first-set-in-syntax-analysis/
https://www.geeksforgeeks.org/follow-set-in-syntax-analysis/
这个问题的测验