FIRST 集合算法伪代码详解

本文提供 FIRST 集合算法的伪代码,帮助理解和实现该算法。

1. 初始化 FIRST 集合为空集

FIRST(A) = {} // 对于每个符号 A

2. 对于每个终结符,将其本身加入 FIRST 集合

对于每个终结符 a
    FIRST(a) = {a}

3. 对于每个非终结符 A,执行以下步骤:

对于每个非终结符 A
    // a. 如果 A 可以推出空串,将空串加入 FIRST 集合
    如果 A -> ε
        FIRST(A) = FIRST(A) ∪ {ε}
    
    // b. 对于每个 A 的产生式 A->X1X2...Xn,执行以下步骤:
    对于每个 A 的产生式 A -> X1X2...Xn
        i. 将 FIRST(X1) 加入 FIRST(A)
        FIRST(A) = FIRST(A) ∪ FIRST(X1)
        
        ii. 如果 FIRST(X1) 包含空串,将 FIRST(X2) 加入 FIRST(A)
        如果 ε ∈ FIRST(X1)
            FIRST(A) = FIRST(A) ∪ FIRST(X2)
        
        iii. 如果 FIRST(X2) 包含空串,将 FIRST(X3) 加入 FIRST(A)
        如果 ε ∈ FIRST(X2)
            FIRST(A) = FIRST(A) ∪ FIRST(X3)
        
        iv. 重复 ii 和 iii,直到所有 Xi 的 FIRST 集合都不包含空串,或者所有 Xi 都已处理完毕
        直到 ε ∉ FIRST(Xi) 或 i > n

4. 返回所有符号的 FIRST 集合

示例:

假设文法 G 为:

S -> AB | a
A -> a | ε
B -> b

则 FIRST 集合为:

FIRST(S) = {a}
FIRST(A) = {a, ε}
FIRST(B) = {b}

注意:

  • ε 表示空串。
  • ∪ 表示集合的并集。
  • 该算法的实现需要递归调用,直到所有符号的 FIRST 集合都已计算完毕。

希望以上内容对您理解 FIRST 集合算法有所帮助。

FIRST 集合算法伪代码详解

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

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