求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