First集、Follow集、Predict集的简单求法 三个重要集合

求3个重要集合的公式比较复杂难记,因此要理解求集合的目的,然后记住求法,而不是公式。

First集:首符集

A->β
目的:
First(A)集合,就是要求出A能推导出的所有终极符串的 开头的那个终极符 的集合。
在自顶向下语法分析中,可以根据输入字符属于哪个产生式的first集,选择相应的产生式。

方法:
1、β是就是终极符
如β->a 则这个终极符(a)加入first集
2、β的第一个符号是终极符
如:A->aX 则这个终极符(a)加入 first集
3、β是ε
如:A->ε 则ε加入first集
4、β的第一个符号不是终极符
①如果β中都是非终极符,这些非终极符的first集都有ε,则ε加入first集

如A->BCD B、C、D的first集中都有ε,则BCD的first集都加入first集
②如果β中的,前i个非终极符的first集中都有ε,则将第一个到第i+1个符号的first集都除去ε,然后加入first集
如A->BCd B->a|ε C->ε 有first(B)={a、ε} first(C)={ε}
则first(A)为B、C、d的first集除去ε,为:a、d
验证:A可能为ad、d , 因此首符集 first(A)={a、d}

Follow集:跟随符集

A->β
目的:求出在某个句型中出现在A的后面的终极符的集合
在自顶向下语法分析中,当β可以推出空串,选择输入符号在follow集合中的产生式进行推导。
方法:
1、初始化,开始符的follow集加入“#”,其余follow集合为空;
2、如果想求B,找A->…B…
首先,B的右边符号为空或其first集含ε时,把A的follow集加入B的follow集
如 A->aB
然后,B后面的符号的first集去掉ε,加入follow集。
直到收敛,不再增加。

Predict集:预测符集

目的:综合了first集和follow集,在自顶向下语法分析中,根据输入符号,预测产生式。
方法:
A->β
1、first(β)中没有ε,first(β)即为predict集
2、first(β)中有ε,first(β)除去ε,加上follow(A)即为predict集

你可能感兴趣的:(编译原理)