📜  语法分析中的跟随集(1)

📅  最后修改于: 2023-12-03 15:41:46.871000             🧑  作者: Mango

语法分析中的跟随集

在编译原理中,语法分析是一个非常重要的概念。语法分析的主要作用是将源代码转换成抽象语法树(AST),以便进一步处理。而跟随集(Follow Set)是语法分析中的一个关键概念,用于确定在某个非终结符号后面可能出现的终结符号集合。

什么是跟随集

跟随集是指在语法分析中用于识别某个非终结符号后面可能出现的终结符号集合。在语法分析过程中,编译器需要弄清楚每个非终结符号后面可能出现的所有终结符号。这样,编译器就可以预测接下来要进行的语法动作,并避免多次回溯。

如何确定跟随集

跟随集的确定需要结合产生式以及其他非终结符的跟随集来确定。具体流程如下:

  • 如果有一个非终结符号A,且其后面紧接着终结符号a,则a属于A的跟随集;
  • 如果有一个非终结符号A,在某个产生式中后面紧跟着另一个非终结符号B,则把B的首符集加入到A的跟随集中;
  • 如果有一个非终结符号A,在某个产生式中后面跟随着非终结符号B的某一个产生式,则把B的首符集减去空串(如果存在)加入到A的跟随集中;
  • 如果有一个非终结符号A是某个产生式的最后一个符号,则把该产生式左部非终结符的跟随集加入到A的跟随集中。
例子

以文法G为例:

S -> aAbB | bBaA
A -> c | ε
B -> d | ε

我们来确定一下非终结符号S的跟随集:

  • 根据第一条规则,我们可以将b加入到S的跟随集;
  • 根据第二条规则,A的首符集是{c,ε},所以将它们加入到S的跟随集;
  • 根据第三条规则,B的首符集是{d,ε},所以将它们减去空串之后加入到S的跟随集;
  • 根据第四条规则,将最后一个非终结符号B的跟随集加入到S的跟随集。

最终得到的跟随集为{b,c,d}。

总结

跟随集是在语法分析中用于确定某个非终结符号后面可能出现的所有终结符号的集合。确定跟随集的过程需要结合产生式以及其他非终结符的跟随集来进行。在编写语法分析程序时,需要对跟随集有一个清晰的认识,并将其正确地应用到相关算法中,来提高语法分析的效率。