C 语言 First 和 Follow 程序

17 Mar 2025 | 6 分钟阅读

FirstFollow 集合 用于 语法分析 过程。在本文中,我们将结合 C 语言学习 FirstFollow 集合,并编写一个 C 语言程序来计算 FirstFollow 集合。

由于 FirstFollow 集合 用于 编译器设计 和解析技术,建议先了解 语法分析、LL(1) 解析 的基础知识,以及计算给定文法的 FirstFollow 集合 的规则。

让我们来理解 First 集合Follow 集合

First 集合

文法中 非终结符First 集合 是指由该 非终结符 生成的字符串的 第一个符号 是的 终结符 集合。换句话说,它是从该 非终结符 推导出的字符串开头可能出现的所有标记的集合。

Follow 集合

文法中 非终结符Follow 集合 是指在文法的任何有效句子中,可能紧跟在由该 非终结符 推导出的 字符串 后面的终结符集合。换句话说,它是任何有效句子中可能出现在 非终结符 之后的标记的集合。

示例

让我们考虑以下作为输入的 上下文无关文法

输入

计算给定文法的 First 和 Follow 集合的 C 程序

代码

输出

First and Follow Program in C

说明

上述 C 程序 将打印出给定文法的计算得到的 FirstFollow 集合。让我们来理解 FirstFollow 集合 是如何计算的。

步骤 1:计算 First 集合

First(E): 它包含产生式 E -> AB第一个终结符,即 A 的 First 集合 中的 'i'

First(A): 它包含产生式 A ->"ilove"第一个终结符,即 'i'

First(B): 它包含产生式 B ->"jtptutorials"第一个终结符,即 'j'

步骤 2:计算 Follow 集合

Follow(E): 由于 'E'开始符号Follow(E) 将包含 '$' 符号,它代表 输入结束,因为开始符号后面可以跟着输入的结束。

Follow(A): 它包含在任何产生式中可能跟在 'A' 后面的 终结符。在此文法中,'A' 后面跟着 'B',所以我们将 First(B) 包含在 Follow(A) 中。

Follow(B): 它包含在任何产生式中可能跟在 'B' 后面的 终结符。由于没有其他产生式 跟随 'B',我们将查看 Follow(E),因为 'E' 可以产生 'B'

结论

我们已经理解了如何编写 C 程序来计算给定上下文无关文法的 First 和 Follow 集合