所有大写字母代表非终结符,小写字母代表终结符,省略号代表未知数目(可能为0)的不确定类型的文法符号。
First集合:
First集合顾名思义就是求一个文法符号串所可能推导出的符号串的第一个终结符的集合。
First(X)就是求X所有推导出的符号串的第一个符号的集合。
求First集合可分如下几种情况:
1、单个符号的First集合:单个终结符的First集合就是它自己。
2、单个非终结符的First集合:
3、多个符号形成的符号串的First结合:
Follow集合:
- Follow集合也是顾名思义的,就是文法符号后面可能跟随的终结符的集合(不包括空 串ε)。Follow(X)就是求X后面可能跟随的符号集合。求Follow集合可分如下几种情况:终结符的Follow集合没有定义,只有非终结符才会有Follow集合。
A–>…Ua… 要求的Follow集合的非终结符后跟终结符
- 根据定义,显然a属于Follow(U)。这种情况下,Follow(U)和A没有任何关系,产 生式左边是什么无所谓。
A–>…UP… 要求的Follow集合的非终结符后跟非终结符
A–>…UP并且ε属于First(P) 要求的Follow集合的非终结符后跟非结尾的终结符, 并且结尾非终结符的First集合包含空串。
A–>…U 要求的Follow集合的非终结符在产生式结尾
注意:Follow集合中的符号一定是终结符,并且不能包括空串ε,而且定义开始符号 的Follow集合初始为{#(句子括号)}。
Select集合:
Select集合就是产生式左部的可能的推导结果的起始符号。
Select(A–>B)就是求这个产生式中A可能推导出起始符号集合(不包含空串ε)。
求Select集合可分如下几种情况:
A–>X (X为任意文法符号串,不限于非终结符或单个符号),并且X不能推导出空串 ε
根据定义,显然A推出的符号串起始就是X的起始,也就是First(X).
Select(A–>X)= First(X)
A–>X (X为任意文法符号串,不限于非终结符或单个符号),并且X能推导出空串ε
根据定义,显然First(X)属于Select(A–>X),此外,当X推导为空串时,显然A 也推导为空串,那么此时推导出的符号串就会是A后面的符号的推导结果。也就是 Follow(A),所以,此时Follow(A)也属于Select(A–>X)。
注意:Select集合中不包括空串ε,但有可能会包含#(句子括号)。