首先,这两个集主语是候选式,是V*中的一个终结符/非终结符。
由于FOLLOW集的定义和构造步骤里面都涉及FIRST集,故先介绍FIRST集。

一.FIRST集的定义如下:
FIRST(α)={a|α=>aβ, a∈Vt, α, β∈V*},若α=>(*)ε则规定ε∈FRIST(α)。
先看这个定义的主干部分,首符集里面的组成元素都是终结符,什么样的终结符?产生式右边第一个位置上的终结符,它会被纳入产生式左边的非终结符的首符集。
这个定义的补充部分意思是,如果非终结符可经多步推到得到ε,那么ε也纳入它的首符集。

二. FIRST集的构造步骤如下:
1.若X ∈Vt,则FIRST(X)={X}

2.若X∈Vn,且有产生式X→a…,则把a加入到FIRST(X)中;
若X→ɛ也是一个产生式,则把ɛ也加到FIRST(X)中。

3.若X→Y…是一个产生式且Y∈Vn,则把FIRST(Y)中的所有非ɛ元素都加到FIRST(X)中;若X → Y1Y2…YK 是一个产生式,Y1,Y2,…,Y(i-1)都是非终结符,而且,对于任何j,1≤j ≤i-1, FIRST(Yj)都含有ɛ (即Y1…Y(i-1) =>(*)ɛ),则把 FIRST(Yj)中的所有非ɛ元素都加到FIRST(X)中;特别是,若所有的FIRST(Yj , j=1,2,…,K)均含有ɛ,则把 ɛ 加到FRIST(X)中。

三. FOLLOW集的定义如下:
FOLLOW(A)={a | S=>()μ A β且a ∈ FRIST(β),μ ∈V,β∈V+ }
若S=>()u A β ,且β=>()ε,则#∈FOLLOW(A)
同样,我们先看这个定义的主干部分,FOLLOW集里面的元素都来自首符集,说明也都是非终结符,与首符集不同的是,A的FOLLOW集,A出现在产生式的右侧,而不是左侧。
这个定义的补充部分意思是,如果一个产生式经过多部推导后得到u A β,而跟在A后面的β又能够经过多步推导得到ε,则把#加到FOLLOW(A)。

四.FOLLOW集的构造步骤如下:
1 对于文法的开始符号S,置#于FOLLOW(S) 中。
2 若A→α B β是一个产生式,则把FIRST(β)中的所有非ɛ元素加至FOLLOW(B)中,把FIRST(β)中的ε换成#加至FOLLOW(B)。
3 若A→α B是一个产生式,或A→ αBβ是 一个产生式而β=>(*)ɛ (即 ɛ∈FIRST(β)), 则把FOLLOW(A)加至FOLLOW(B)中。

五.举个例子
G[ E]:
(1) E → TE’
(2) E’ → +TE’
(3) E’→ ɛ
(4) T → FT’
(5) T’→ *FT’
(6) T’ → ɛ
(7) F → (E)
(8) F → i
试找出文法G的FIRST集and FOLLOW集
(请拿出纸笔按照上面的步骤走一遍哦~)

一起看一下答案吧~
各非终结符的FIRST集合如下:
FIRST(E)={(,i}
FIRST(E’)={+,ε}
FIRST(T)={(,i}
FIRST(T’)={*,ε}
FIRST(F)={(,i}

各非终结符的FOLLOW集合为:
FOLLOW(E)={),#}
FOLLOW(E’)={) ,#}
FOLLOW(T)={+,) ,#}
FOLLOW(T’)={+,) ,#}
FOLLOW(F)={*,+,),#}

提示:注意那些会推导出ε的候选式引发的连锁效应。

FIRST集与FOLLOW集构造步骤相关推荐

  1. First集、Follow集

    构建First集 求First集步骤 首先,对所有非终结符A, 先设定FIRST(A)= {} (空) FIRST(A) = { t | A → tw },t为终结符,w为任意类型 然后, 对每一个产 ...

  2. 文法G[E]: E→E+T|T ,T→T*F|F ,F→i|(E) 求FIRST集,FOLLOW集

    文法G[E]: E→E+T|T T→T*F|F F→i|(E) 求FIRST集,FOLLOW集,判定i+i * i,以及构造预测分析表.

  3. 编译原理之--FIRST集、FOLLOW集 和 SELECT集

    FIRST集.FOLLOW集 和 SELECT集 一.FIRST集 FIRST(A)为A的开始符或者首符号集. 1.定义: 设G=(VT,VN,S,P)是上下文无关文法 ,FIRST(α)={a|α能 ...

  4. 文法G[S]: S→AB S→bC A→ε A→b B→ε B→aD C→AD C→b D→aS D→c 求FIRST集,FOLLOW集。

    文法G[S]: S→AB S→bC A→ε A→b B→ε B→aD C→AD C→b D→aS D→c 求FIRST集,FOLLOW集.

  5. FIRST集、FOLLOW集 和 SELECT集

    FIRST集.FOLLOW集 和 SELECT集 一.FIRST集 FIRST(A)为A的开始符或者首符号集. 1.定义: 设G=(V T ,V N ,S,P)是上下文无关文法 ,FIRST(α)={ ...

  6. 编译原理实验-LL1语法分析器(自动生成First集、Follow集求法)java实现

    编译原理实验-LL1语法分析器(自动生成First.Follow)java 博主在做实验时,参考众多他人代码,发现bug众多,在@moni_mm代码基础上,与伙伴把能看到的BUG都做出修正,同时增添了 ...

  7. 编译器-LL(1)-First集与Follow集

    First(A) 为A的开始符或者首符号集 Follow(A) 指的是在某些句型中紧跟在A右边的终结符号的集合 求下列右递归语法的First集和Follow集 第一行:Expr → Term Expr ...

  8. 编译原理:LL(1)文法的First集跟Follow集

    一.FIRST集 定义: ("=*>" 符号意为"经过任意步")         设G=(Vt,Vn,S,P),令G是一个不含左递归的文法, 对G的所有非 ...

  9. 怎样求FIRST集与FOLLOW集

    S→ABc A→a|ε B→b|ε First集合求法: 能 由非终结符号推出的所有的开头符号或可能的ε,但要求这个开头符号是终结符号.如此题A可以推导出a和ε,所以FIRST(A)={a,ε}:同理 ...

最新文章

  1. 优化SQl的30中常用方法
  2. 连载:阿里巴巴大数据实践—实时技术
  3. 用python os.system 执行 批处理的时候, 出现的一些问题
  4. CMU Database Systems - Sorting,Aggregation,Join
  5. 解决 ImportError: No module named 'pip._internal'问题
  6. labelimg如何调整框的颜色_新手如何快速做字幕?
  7. 工具的使用——vs2013(三)
  8. 第 4 章 terminal
  9. 服务器内存只支持双路主板,壕到没朋友,支持双路18核CPU、16条内存、3路显卡的主板来了...
  10. 一个串口连接另外两个串口的设计
  11. windows 设置目录不可执行程序
  12. 资深影迷不可不知的宽高比:Aspect Ratio 电影画面比例
  13. R 4.0 版本安装 rtools40教程,解决 Rtools is required to build R packages but is not currently installed 问题
  14. 词汇处理——词义辨析消歧(一)
  15. 便携式洁面仪商城质检报告检验标准是什么
  16. FPGA三分频电路的实现
  17. 智能跳过节假日算法java_java计算两个日期之间的天数,排除节假日和周末
  18. 苹果 开发者账号如下
  19. 第四届vex机器人亚洲锦标赛_站在亚洲之巅丨上实剑桥国际高中吴霖哲同学斩获VEX机器人亚洲锦标赛金奖...
  20. python可以做鲁棒优化吗_Python pyrobust包_程序模块 - PyPI - Python中文网

热门文章

  1. (2)iOS用UICollectionView实现Gallery效果
  2. 前端开发学习Day27
  3. 谷歌浏览器输入框背景颜色变黄的解决方案
  4. iOS底层原理 - 常驻线程
  5. Python 编写用户登录接口
  6. 自动配置IPv4问题
  7. 33.搜索插件——autocomplete
  8. 主机入侵防御系统(HIPS)分析
  9. 什么是CPI指数和GDP
  10. C语言应用于LR中-如何得到数组长度