LL(1)中First和Follow集合的求法

发布时间:2018-06-30 16:49:33   来源:文档文库   
字号:

LL(1)文法判别之First集合、Follow集合

说明:

所有大写字母代表非终结符,小写字母代表终结符,省略号代表未知数目(可能为0)的不确定类型的文法符号。

First集合:

First集合顾名思义就是求一个文法符号串所可能推导出的符号串的第一个终结符的集合。

FirstX)就是求X所有推导出的符号串的第一个符号的集合。

First集合可分如下几种情况:

单个符号的First集合:

单个终结符的First集合就是它自己。

单个非终结符的First集合:

A-->a… 产生式右部以终结符开头

根据定义,这种情况下显然可以看出a属于First(A)

A-->B… 产生式右部以非终结符开头

根据定义,既然可以把A替换成B……,也可以看出FirstB)属于FirstA)。

这是一个递归的推导。

多个符号形成的符号串的First结合:

符号串ABC…,并且A不能推导出空串ε

A不能推导出空串ε,显然根据定义FirstABC…)=FirstA

符号串ABC…,并且A可能推导出空串ε

当A不是空串的时候,显然FirstA)属于FirstABC…),但当A是空串的时候,

ABC…就成了BC…,此时根据B是否能推出空串来决定是否将FirstB)加入First ABC…)。这是一个递归的推导,综上所述,符号串中的第一个不能推出空串的符 号前面所有符号的First集合减去空串ε都属于FirstABC…),第一个不能推出空串的 符号的First集合也属于FirstABC…)。也就是假设AB都可以推出空串,C不能推 出空串,FirstABC…)=FirstA-εFirstB-εFirstC)。

符号串ABC…,并且所有的符号ABC…都可能推导出空串ε

此时FirstABC…)就是所有符号的First集合的并集

注意:First集合中的符号一定是终结符,终结符也包括空串ε。

Follow集合:

Follow集合也是顾名思义的,就是文法符号后面可能跟随的终结符的集合(不包括空 串ε)。

Follow(X)就是求X后面可能跟随的符号集合。

Follow集合可分如下几种情况:

终结符的Follow集合没有定义,只有非终结符才会有Follow集合。

A-->Ua… 要求的Follow集合的非终结符后跟终结符

根据定义,显然a属于FollowU)。这种情况下,FollowU)和A没有任何关系,产 生式左边是什么无所谓。

A-->UP… 要求的Follow集合的非终结符后跟非终结符

根据定义,显然P的第一个符号属于FollowU),也就是FirstP)属于FollowU)。

A-->UP并且ε属于FirstP) 要求的Follow集合的非终结符后跟非结尾的终结符, 并且结尾非终结符的First集合包含空串。

这是上一种情况的一种特例,除了要按上一种情况处理,FirstP)属于FollowU) 以外还要进行分析;因为当P推导为空串时,空串不能出现在Follow集合中,所以U 后面跟随的应该是P后面的东西,可P已经是结束的符号,此时U后面显然就是A后 面跟随的东西了。所以在这种情况下FollowA)也属于FollowU)。

A-->U  要求的Follow集合的非终结符在产生式结尾

这时候又要递归推导,UA的结尾,所以U后面跟随的东西也就是A后面跟随的东 西。所以FollowA)属于FollowU)。

注意:Follow集合中的符号一定是终结符,并且不能包括空串ε,而且定义开始符号 的Follow集合初始为{#(句子括号)}

本文来源:https://www.2haoxitong.net/k/doc/59587acc03d8ce2f0166239a.html

《LL(1)中First和Follow集合的求法.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式