FIRST集与FOLLOW集构造步骤
首先,这两个集主语是候选式,是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集构造步骤相关推荐
- First集、Follow集
构建First集 求First集步骤 首先,对所有非终结符A, 先设定FIRST(A)= {} (空) FIRST(A) = { t | A → tw },t为终结符,w为任意类型 然后, 对每一个产 ...
- 文法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,以及构造预测分析表.
- 编译原理之--FIRST集、FOLLOW集 和 SELECT集
FIRST集.FOLLOW集 和 SELECT集 一.FIRST集 FIRST(A)为A的开始符或者首符号集. 1.定义: 设G=(VT,VN,S,P)是上下文无关文法 ,FIRST(α)={a|α能 ...
- 文法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集.
- FIRST集、FOLLOW集 和 SELECT集
FIRST集.FOLLOW集 和 SELECT集 一.FIRST集 FIRST(A)为A的开始符或者首符号集. 1.定义: 设G=(V T ,V N ,S,P)是上下文无关文法 ,FIRST(α)={ ...
- 编译原理实验-LL1语法分析器(自动生成First集、Follow集求法)java实现
编译原理实验-LL1语法分析器(自动生成First.Follow)java 博主在做实验时,参考众多他人代码,发现bug众多,在@moni_mm代码基础上,与伙伴把能看到的BUG都做出修正,同时增添了 ...
- 编译器-LL(1)-First集与Follow集
First(A) 为A的开始符或者首符号集 Follow(A) 指的是在某些句型中紧跟在A右边的终结符号的集合 求下列右递归语法的First集和Follow集 第一行:Expr → Term Expr ...
- 编译原理:LL(1)文法的First集跟Follow集
一.FIRST集 定义: ("=*>" 符号意为"经过任意步") 设G=(Vt,Vn,S,P),令G是一个不含左递归的文法, 对G的所有非 ...
- 怎样求FIRST集与FOLLOW集
S→ABc A→a|ε B→b|ε First集合求法: 能 由非终结符号推出的所有的开头符号或可能的ε,但要求这个开头符号是终结符号.如此题A可以推导出a和ε,所以FIRST(A)={a,ε}:同理 ...
最新文章
- 优化SQl的30中常用方法
- 连载:阿里巴巴大数据实践—实时技术
- 用python os.system 执行 批处理的时候, 出现的一些问题
- CMU Database Systems - Sorting,Aggregation,Join
- 解决 ImportError: No module named 'pip._internal'问题
- labelimg如何调整框的颜色_新手如何快速做字幕?
- 工具的使用——vs2013(三)
- 第 4 章 terminal
- 服务器内存只支持双路主板,壕到没朋友,支持双路18核CPU、16条内存、3路显卡的主板来了...
- 一个串口连接另外两个串口的设计
- windows 设置目录不可执行程序
- 资深影迷不可不知的宽高比:Aspect Ratio 电影画面比例
- R 4.0 版本安装 rtools40教程,解决 Rtools is required to build R packages but is not currently installed 问题
- 词汇处理——词义辨析消歧(一)
- 便携式洁面仪商城质检报告检验标准是什么
- FPGA三分频电路的实现
- 智能跳过节假日算法java_java计算两个日期之间的天数,排除节假日和周末
- 苹果 开发者账号如下
- 第四届vex机器人亚洲锦标赛_站在亚洲之巅丨上实剑桥国际高中吴霖哲同学斩获VEX机器人亚洲锦标赛金奖...
- python可以做鲁棒优化吗_Python pyrobust包_程序模块 - PyPI - Python中文网