文法: S -> aAB A -> bB | c B -> d 的follow集怎么推导
时间: 2024-06-05 14:13:14 浏览: 18
首先,我们需要先求出非终结符的 FIRST 集。
对于 A 而言,它的 FIRST 集包括终结符 b 和 c,因为 A 可以推导出 bB 或 c。因此,FIRST(A) = {b, c}。
对于 B 而言,它的 FIRST 集只包括终结符 d,因为 B 可以推导出 d。因此,FIRST(B) = {d}。
接下来,我们可以利用 FOLLOW 集的定义和一些规则来求 FOLLOW(A) 和 FOLLOW(B):
1. 对于起始符号 S,将 $ 放入 FOLLOW(S) 中。
2. 如果存在一个产生式 A -> αBβ,那么 FIRST(β) 中除了 ε 之外的所有符号都应该被加入到 FOLLOW(B) 中。
3. 如果存在一个产生式 A -> αB 或者 A -> αBβ,并且 ε 属于 FIRST(β),那么 FOLLOW(A) 中所有符号都应该被加入到 FOLLOW(B) 中。
根据以上规则,我们可以得到 FOLLOW(A) 和 FOLLOW(B) 的计算过程如下:
FOLLOW(B):
B 不在任何产生式的右侧,所以没有规则可以用于计算 FOLLOW(B)。
FOLLOW(A):
由于 S -> aAB,所以将 $ 加入到 FOLLOW(B) 中,即 FOLLOW(B) = {$}。
因为 A 只出现在 S -> aAB 中,所以将 FOLLOW(S) 加入到 FOLLOW(A) 中,即 FOLLOW(A) = {$}。
因为 A -> bB,所以将 FIRST(β) = {B} 中除了 ε 的所有符号(即 {d})加入到 FOLLOW(B) 中,即 FOLLOW(B) = {$, d}。
因为 A -> c,所以没有符号可以加入到 FOLLOW(A) 中。
因为 B -> d,所以将 FOLLOW(A) 加入到 FOLLOW(B) 中,即 FOLLOW(B) = {$, d, $}。
因此,我们得到了 FOLLOW(A) = {$} 和 FOLLOW(B) = {$, d, $}。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)