考虑下面的语法
S → i E t S S' | a S' → e S | ε E → b
在预测分析表中。M、 在这种语法中,M[S’,e]和M[S’,$]分别是 (A) {S’→ e S}和{S’→ e} (B) {S’→ e S}和{} (C) {S’→ ε} 还有{S’→ ε} (D) {S’→ 是的,是的→ ε} 还有{S’→ ε} 答复: (D) 说明: 这里将解析表表示为M[X,Y],其中X表示行(非终端),Y表示列(终端)。
下面是填充解析表的规则。
对于语法中每个不同的产生式规则A->α,我们需要应用给定的规则:
规则1 :如果A–>α是产物,对于第一个(α)中的每个端子“A”,将A–>α添加到M[A,A]
规则2 :如果‘ε’位于第一位(α),则为后面(A)中的每个‘b’将A–>α添加到M[A,b]。
由于条目已被要求对应于非终端S’,因此我们只需要考虑它的产品来得到答案。
因为→ 锿 ,根据规则1,这个产生式规则应该放在条目M[S’,FIRST(eS)]处,根据给定的语法,FIRST(eS)={e}, 因此,S’->eS被放在解析表的M[S’,e]项中。
同样地,
对于S’->ε ,因为第一个(ε)={ε},所以应该应用规则2,因此,这个产生式规则应该放在解析表中的M[S’,FOLLOW(S’)],FOLLOW(S’)=FOLLOW(S)={e,$}, 因此,R->ε被放置在条目M[S’,e]和M[S’,$]处。
所以答案是D选项。
请访问以下链接,了解如何查找第一组和第二组。
http://geeksquiz.com/compiler-design-first-in-syntax-analysis/ http://geeksquiz.com/compiler-design-follow-set-in-syntax-analysis/ 这个问题的小测验