该文法不是 SLR(1) 文法。

原因如下:

  1. 计算 FOLLOW(A):

FOLLOW(A) = { $, b, d }

  1. 计算 CLOSURE({[A' → ·A, $]}):

CLOSURE({[A' → ·A, $]}) = {[A' → ·A, $], [A → ·aAd, $], [A → ·aAb, $], [A → ·ε, $]}

  1. 计算 GOTO({[A' → ·A, $]}, a):

GOTO({[A' → ·A, $]}, a) = {[A → a·Ad, $], [A → a·Ab, $]}

  1. 计算 GOTO({[A → a·Ad, $], [A → a·Ab, $]}, d):

GOTO({[A → a·Ad, $], [A → a·Ab, $]}, d) = {[A → aA·d, $]}

  1. 计算 ACTION 和 GOTO 表:

| | a | b | d | $ | |----|---|---|---|---| | 0 | s2 | | | | | 1 | | | | acc | | 2 | r3 | s4 | | r3 | | 3 | r1 | r1 | r1 | r1 | | 4 | | | s5 | | | 5 | r2 | r2 | r2 | r2 |

其中,s表示移进(shift),r表示规约(reduce),acc表示接受。

可以发现,ACTION 表中有移进-规约冲突和规约-规约冲突,因此该文法不是 SLR(1) 文法。

已知文法 A→aAd|aAb|ε 是否为 SLR(1) 文法?

原文地址: https://www.cveoy.top/t/topic/na5Q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录