对于没有 epsilon 和单元产生式(即类型 A -> є 和 A -> a)的文法,自底向上解析器可以采取的最大减少移动次数是多少来解析具有 n 的字符串令牌?
(A) n/2
(B) n-1
(C) 2n-1
(D) 2 n答案:(乙)
解释:在问题中给出了一个没有 epsilon 和单元产生式的文法(即类型 A -> є 和 A -> a)。
为了获得最大数量的 Reduce 动作,我们应该确保在每个句子形式中只减少一个终端。由于没有单位生产,所以最后 2 个代币将只需要 1 次移动。
因此,要减少 n 个标记的输入字符串,首先使用 n-2 个减少移动减少 n-2 个标记,然后使用具有 .所以总共 n-2+1 = n-1 减少移动。
假设字符串是 abcd。 ( n = 4 )。
我们可以编写接受这个字符串的语法如下:
S->aB
B->bC
C->cd
上述最正确的推导是:
S -> aB ( Reduction 3 )
-> abC ( Reduction 2 )
-> abcd ( Reduction 1 )
我们可以在这里看到,没有生产用于 unit 或 epsilon。因此这里减少了 3 次。
我们可以使用其他一些也不会产生单位或 epsilon 产生式的语法来减少减少次数,
S->abA
A-> cd
上述最正确的推导为:
S -> abA ( Reduction 2 )
-> abcd ( Reduction 1 )
因此减少了 2 次。
但是我们有兴趣知道来自第一个语法的最大减少次数。因此总共减少了 3 次作为最大值,即 (n – 1),因为这里的 n = 4。
因此,选项 B。
这个问题的测验