编译原理 first follow select集合理解+例题分析实战


补充:

FIRST集里面可以有,但是不能有$

 

FOLLOW集里面可以有$,但是不能有

 下面通过一个例子,来展示具体问题分析方法:

 

 

 当计算上面文法的first集合的时候,

第一步,先把所有符号first集写下:

 

第二步,分析每一个文法,将分析结果写入first集合

例如第一个文法,可以得出first(E)集合中,需要包括first(T)中的所有元素,此时first(T)中为空,此时不进行操作

再看第二个文法,可以得出first(E`)集合包括+和,所以把这两个符号,写入对应first集合

 

 

以此类推

第三步,循环第二步操作,把对应结果再次分析,直到循环整轮没有新的元素添加进集合中为止

最后是结果:

 

 

 

下面进行计算follow集实战:

第一步,先把所有元素的follow集合写好:

 

 

 第二步,将终结符$放在开始的follow集合中

第三步,开始进行每一行文法的分析

分析第一行:可以看出T的follow集合等于E`的first集合,E`的first集合包括+和,这里的话,把+放进T的follow集合中,但是因为

 

 

follow集合中没有,所以可以得出结论,E`为空时,T的follow集合和E的follow集合是一样的,需要吧元素移过去,以此类推

第四步:重复上面操作,直到没有新元素添加进集合

 最后是结果:

 

 

下面展示select集合的求法:

 

1:遇见非终结符,select集合为非终结符的first集合

2:遇见终结符,直接写进集合

3:当遇到空串,为前面元素的follow集合

 

 

 

 

     

   First(A)集的作用是标示在替换非终结符A的时候,替换后的文法的首字母集合,语法分析程序根据这个来判断给定的语言是否是合法的,是符合规则的。

 

 

 

 

 

 

         Follow(A)的作用是标示那些可以出现在A之后的字符,语法分析程序根据这个,在A可以被替换为e(空)的时候来进行判断,看当前的文法是否是合法的。

         这里简单说明下,比如A->b,A->e(空) 当给定的语言是 bXXXXX的时候,根据第一句文法就可以判定句子合法,但是如果给的语言是cXXXXX的时候,因为A->可以替换为空,这时候就需要一句A的follow集来进行判断,若A的follow集里面含有c 则语言是合法的

 

 

         Select集的作用是将first集和follow集进行合并,如果两个文法的左端都是A,若他们的select集交集为空,表明他们是两个无关的,不会产生不确定性的文法,反之,则表明文法不是LL(1)文法

       

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM