【编译原理笔记05】语法分析:FIRST集和FOLLOW集的计算,[非]递归的预测分析法,预测分析中的错误处理

本文介绍了编译原理中FIRST集和FOLLOW集的计算方法,包括递归和非递归预测分析法,并探讨了预测分析中的错误处理。讲解了如何基于FIRST和FOLLOW集计算SELECT集,以及如何构建和使用预测分析表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次笔记内容:
4-4 FIRST集和FOLLOW集
4-5 递归的预测分析法
4-6 非递归的预测分析法
4-7 预测分析法中的错误处理

本节课幻灯片,见于我的 GitHub 仓库:第5讲 语法分析_2.pdf

承接上一节课。上一节课提出了FIRST集FOLLOW集的概念,这节课先来讨论如何计算这两个集合。

FIRST集和FOLLOW集的计算

计算文法符号X的FIRST(X)
  • FIRST(X):可以从X推导出的所有串首终结符构成的集合;
  • 如果 X ⇒ ∗ ϵ X \Rightarrow * \epsilon Xϵ,那么ε∈FIRST(X)。

取决于产生式的右部:

  • 比如2、4、5产生式,左部以终结符打头,这个终结符就是就是产生式可以推导出的终结符,于是加入到 FIRST 集合中
  • 对于非终结符,其依赖于自己的内容,比如F的FIRST为 {( id} ,则 T 的 FIRST 也为这个; E 依赖于 T ,则 E 的 FIRST 也是这个。
算法总结

不断应用下列规则,直到没有新的终结符或ε可以被加入到任何FIRST集合中为止。

  • 如果X是一个终结符,那么FIRST ( X ) = { X };
  • 如果X是一个非终结符,且X→Y1…Yk∈P(k≥1),那么如果对于某个i,a在FIRST (Yi ) 中且ε 在所有的FIRST(Y1) , … , FIRST(Yi-1)中(即Y1…Yi-1 ⇒ \Rightarrow * ε ),就把a加入到FIRST( X )中。如果对于所有的j = 1,2, . . . , k,ε在FIRST(Yj)中,那么将ε加入到FIRST( X );
  • 如果X→ε∈P,那么将ε加入到FIRST( X )中。
接着,计算串X1X2 …Xn的FIRST 集合
  • 向FIRST( X 1 X 2 X 3 X_1X_2X_3 X1X2X3)加入FIRST( X 1 X_1 X1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值