当前位置:首页 » 编程软件 » 编译原理构建first集合视频

编译原理构建first集合视频

发布时间: 2024-11-14 17:43:57

编译原理——First集与Follow集

First(A)为A的开始符或者首符号集。

如果两个A产生式 A -> α | β ,且FIRST(α)和FIRST(β)不相交;

下一个输入符号是x,若x∈FIRST(α),则选择 A->a ,若x∈FIRST(β),则选择 A->b 。

计算FIRST(X)的方法

如果算法看不懂,那我们来根据算法来模拟一下!

因为求FIRST集合如果有终结符号会比较好处理,所以我们逆顺序进行实施;

应该一看明白了!

Follow(A)指的是在某些句型中紧跟在A右边的 终结符号 的集合

一步一步来看

2.1 第一次迭代

第一种情况: FOLLOW(T)=FIRST(E')={ + }

第二种情况 : FOLLOW(E')=FOLLOW(E)={ $ }

第一种情况: FOLLOW(T)=FIRST(E')={ + }

第二种情况 : FOLLOW(T)=FOLLOW(E')={ + , $ }

第一种情况: FOLLOW(F)=FIRST(T')={ * }

第二种情况 : FOLLOW(T')=FOLLOW(T)={ + , $ }

第一种情况: FOLLOW(F)=FIRST(T')={ * }

第二种情况 : FOLLOW(F)=FOLLOW(T')={ + , * , $ }

第一种情况 : FOLLOW(E)={ $ , ) }

2.2 第二次迭代

由于我们列出了等值关系,所以只需要再走一次第一次迭代的过程就可以了!

因为主要是FOLLOW可能在变,所以我们只需要找到FOLLOW的等值关系即可

我在上面标出了第一次迭代的FOLLOW的最新版

下面我只要列出更新的即可

2.3 第三次迭代

第三次迭代就会发现 FOLLOW集合 不再发生改变,这时候规则结束,求出FOLLOW集合。

Follow比较容易出错,出错的点主要在迭代过程的第二种情况的: A -> αBβ 且FIRST(β)包含ε

我们容易忽略这种情况。

只要把每一次迭代过程都写在纸上,尤其注重 Follow集合 的等值!

⑵ 关于编译原理first follow 和select

首先要明白这三个集的作用和用途,知道了他们是用来做什么的之后,理解起来就简单一些
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)文法
计算的公式很繁杂,理解了意思之后,看就能看出来。。。。

⑶ 编译原理中FIRSTVT和LASTVT是什么意思

Firstvt和Lastvt是为了画算符优先关系表的(就是表里面填优先大于小于等于的那个)。
然后要注意他们可都是终结符的集合。
Firstvt
找Firstvt的三条规则:如果要找A的Firstvt,A的候选式中出现:
A->a.......,即以终结符开头,该终结符入Firstvt
A->B.......,即以非终结符开头,该非终结符的Firstvt入A的Firstvt
A->Ba.....,即先以非终结符开头,紧跟终结符,则终结符入Firstvt

Lastvt
找Lastvt的三条规则:如果要找A的Lastvt,A的候选式中出现:
A->.......a,即以终结符结尾,该终结符入Lastvt
A->.......B,即以非终结符结尾,该非终结符的Lastvt入A的Lastvt
A->.....aB,即先以非终结符结尾,前面是终结符,则终结符入Firstvt

⑷ 编译原理语法分析中,求first,follow集合时,要消除左递归吗

如果题目是单纯求first、follow集合,不需要消除左递归。但是,如果求first、follow集合是为了判断文法是否为LL(1)文法的话,可以直接得出否定的结论(因为含有左递归的文法绝对不是LL(1)文法)。可以先对文法进行改写,一般是消除左递归和提取左公共因子,然后再判断。

⑸ 一道《编译原理》求follow集题目,在线等答案

哥们,你这个问题中的一个产生式E’→+TE’| e,应该是E->+TE’ |ε这样吧!否则不可能获得如此结果。
关于求follow集合,龙书中说得很清楚,依据三条规则即可:
1、任何FOLLOW(S)都包含输入终止符号,其中S是开始符号。
适用该条,因此FOLLOW(E’)中包含终止符号#。
2、如果存在产生式,A->αBβ,则将FIRST(β)中除ε以外的符号都放入FOLLOW(B)中。
该条不适用,因为在上述所有产生式中不存在形如E‘->αE’β这样的产生式。
3、如果存在产生式,A->αB,或A->αBβ,其中FIRST(β)中包含ε,则将FOLLOW(A)中的所有符号都放入FOLLOW(B)中。
适用该条,因为存在这样的产生式E->+TE’,使得FOLLOW(E’)=FOLLOW(E)成立。而FOLLOW(E)适用上述第二条,根据产生式F→(E)可求得为FOLLOW(E)={#,)}。
综上,FOLLOW(E’)=FOLLOW(E)={#,)}。

⑹ 编译原理计算first 集和follow集的简单方法 S->bBS' S'->aAS'|ε A->aB|c B->dB' B'->bB'|ε 求计算过程

first : S'=a,ε
S=b
A=a,c
B=d
B'=b,ε
follow: S'=#
S=#
A=a
B=a
B'=a

热点内容
华为浏览器缓存 发布:2024-11-22 04:42:10 浏览:876
罗技g502宏吃鸡脚本 发布:2024-11-22 04:02:33 浏览:291
dxp里如何编译集成库 发布:2024-11-22 03:40:42 浏览:503
php入门开发实战 发布:2024-11-22 03:27:20 浏览:808
研究网络存储 发布:2024-11-22 03:26:33 浏览:83
yumphp版本 发布:2024-11-22 03:21:39 浏览:744
记忆存储味道 发布:2024-11-22 03:21:35 浏览:937
c语言ifelse语句 发布:2024-11-22 03:20:58 浏览:631
塞班安卓怎么刷 发布:2024-11-22 03:16:43 浏览:289
青春密码肌底液怎么样 发布:2024-11-22 03:03:59 浏览:977