“FIRST集、FOLLOW集、构造LL(1)分析表” 的常用方法

  • 第一部分·如何求FIRST集

*FIRST集可以包含空符号ε

FIRST是针对产生式右部的一个函数,在构造LL(1)分析表的时候十分重要。但实际过程中,还是需要先求产生式头部的FIRST集合,这有利于对右部的求解。

  1. 终结符的FIRST集合就是它本身
  2. 如果求产生式右部字符串的FIRST集合,那就是第一个终结符(此实可能是非终结符的形式,那就产生了递归)
  3. 如果求产生式左部的FIRST集合,那就是产生式右边的第一个终结符,同2
  4. 抽象算法:

 

  • 第二部分·如何求FOLLOW集

*FOLLOW集没有空符号ε

FOLLOW是针对于非终结符的一种函数,对于非终结符,有三种可能的情况:

    1.非终结符就是一个产生式的开始符号

将句子的结束符号(#)加入到该非终结符的FOLLOW集中

    2.非终结符后紧跟了一个非空字符串a

将FIRST(a)并入到FOLLOW集合中

    3.非终结符后没有符号,或者跟了一个可空的字符串

将FOLLOW(开始符号)并入FOLLOW集合中

抽象算法如下:

 

 

  • 第三部分·如何构造LL(1)分析表
  1. 首先画出表格,表格的左列是每一个产生式的左部(不重复),表格的横行是每一个终结符号。
  2. 接着逐个考察所有产生式。
  3. 抽象算法:

对于G中的每一个产生式, A -> α ,执行以下2步:

1.for  ∀ a ∈ FIRST(α), 将 A -> α 填入 M [A, a ];

//对逐个产生式进行考察,考察产生式的FIRST集合的元素,在找到的元素的对应表格中填写该产生式

2. if(ε ∈ FIRST(α))

         ∀ a ∈ FOLLOW (A) , 将 A -> ε 填入 M [A, a ];

//如果发现产生式的FIRST集中包含空符号,就查找该产生式头部的FOLLOW集合中的元素,在元素的对应表格中填写空产生式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值