📜  门| GATE-CS-2006 |第 85 题

📅  最后修改于: 2021-09-24 06:17:16             🧑  作者: Mango

在上述问题的正确语法中,生成字符串a l b m且 l ≠ m 的推导长度(从 S 开始的步数)是多少?
(A) max(l,m) + 2
(B) l + m + 2
(C) l + m + 3
(D) max(l, m) + 3答案:(一)
解释:
最后一道题的正确语法是(D),即:

S -> AC|CB
C -> aCb|epsilon
A -> aA|a
B -> Bb|b

现在,生成 a l b m形式的字符串的最优化和最直观的方法是首先使用“C -> aCb|epsilon”产生式规则来获得尽可能多的 a 和 b,即 min( l,m)。要获得字符串的其余部分,我们可以相应地使用后两个产生式规则。从上述语法中正式推导出一般格式 a l b m的字符串——

1.      S -> AC 
2.          -> A(aCb) 
3.          -> .... 
4.          -> ....
5.          -> A(am C bm) 
6.          -> A(am bm) 
7.          -> aA(am bm) 
8.          -> .... 
9.          -> ....
10.         -> a(l-m-1)A(am bm) 
11.         -> al bm

从上面的推导步骤集,我们可以计算总步骤如下:

Production 1 took 1 step       : 1                   [using S->AC]
Production 2-5 took steps      : min(l,m)            [using C->aCb] 
Production 6 took 1 step       : 1                   [using C->epsilon]
Production 7-11 took steps     : max(l,m)-min(l,m)   [using A -> aA|a or B -> Bb|b]
                        
               Total steps   : max(l,m) + 2     

因此,答案应该是(A) : max(l,m) + 2

此解释由Vineet Purswani 提供。
这个问题的测验