📜  门| GATE-CS-2007 |第 52 题

📅  最后修改于: 2021-09-25 04:12:05             🧑  作者: Mango

考虑具有非终结符 N = {S,C,S1 },终结符 T={a,b,i,t,e} 的文法,以 S 作为起始符号,以及以下规则集:

S --> iCtSS1|a
S1 --> eS|ϵ
C --> b

语法不是 LL(1) 因为:
(A)它是左递归的
(B)它是正确的递归
(C)它是模棱两可的
(D)它不是上下文无关的。答案: (C)
解释:

LL(1) 语法不会在其解析表的单个单元格中提供多个条目。它在单个单元格中只有一个条目,因此它应该是明确的。

选项A是错误的。语法不是递归的。对于留递归的文法,产生式应该是 A->Ab 形式,其中 A 是单个非终结符,b 是任何文法符号字符串。

选项 B 是错误的。因为右递归文法与 LL(1) 无关。

选项 D 是错误的。因为给定的语法显然是上下文无关语法。如果一个文法具有 A->(V∪ T)* 形式的产生式,则该文法是 CFG,其中 A 是单个非终结符,V 是一组非终结符,T 是一组终结符。

因此选项C应该是正确的。即语法不明确。

但是让我们看看语法是如何模棱两可的。

如果语法不明确,那么它应该在制作解析表时在单元格中提供多个条目。解析表是在两个函数的帮助下制作的:FIRST 和 FOLLOW。

一个语法的分析表不会有在细胞中的多个条目(即将是LL(1)的语法)当且仅当以下的条件成立的每个生产形式的A->α|β

1) FIRST(α) ∩ FIRST(β) = Φ

2) 如果FIRST(α) 包含’ ε ‘,则FIRST(α) ∩ FOLLOW (A) = Φ,反之亦然。

现在,

  • 对于产生式 S->iCtSS1|a,满足规则 1,因为 FIRST(iCtSS1) ∩ FIRST(a) = {i} ∩ {a} = Φ
  • 对于产生式 S1->eS|ε,满足规则 1,因为 FIRST(eS) ∩ FIRST(ε) = {e} ∩ {ε} = Φ 。但是这里由于 FIRST 中的 ‘ε’,我们必须检查规则 2。 FIRST(eS) ∩ FOLLOW(S1) = {e} ∩ {e, $} ≠ Φ 。因此规则 2 在此产生式规则中失败。因此解析表中会有多个条目,因此语法是不明确的,而不是 LL(1)。

请参阅这些链接以了解如何找到 FIRST 和 FOLLOW:

https://www.geeksforgeeks.org/first-set-in-syntax-analysis/

https://www.geeksforgeeks.org/follow-set-in-syntax-analysis/
这个问题的测验