【编译原理】First /Follow /FirstVt /LastVt 集合的简单学习

最近准备考研复试,专业课里有一门编译原理,乍看很难懂,但仅应对几个考点又非常容易上手:

First和Follow用来构造预测分析表(在LL(1)分析法处)。

Firstvt和Lastvt用来构造算符优先关系表(<=>三种关系)。

①First(A)
直观上来说First(A)即为非终结符A的产生式首个终结符的集合(因为有多个产生式)。

有以下几种情况:

A->aB···
First(A)={a}

A->C···|D···
C->c···
D->d···
First(A)={c,d}

A->CD···  
C->c···
First(A)={c}

A->CD···
C->c···|ε
D->d···

First(A)={c,d}(就是如果第一个非终结符可能推出空串,则第二个非终结符的First(D)集合便也加入,以此类推)

这就是求First集合的所有情况。

②Follow(B)
直观上来说就是跟在非终结符L之后的首个终结符的集合,不能包含空串。

有以下几种情况

S->···aBc···

Follow(B)={c}

S->···aBCD···
C->c···
Follow(B)={c}

({c}即为First(C),如果C可能推出ε空串,则添加First(D),以此类推)

S->···B
S->Sa···

Follow(B)=Follow(S)={a}

以上便是求Follow集的所有情况。

③FirstVt(A)

直观上来说就是求非终结符A产生式的首个终结符,但不同于First。

有以下几种情况:

A->a.......,以终结符开头,该终结符入Firstvt(A)
A->B.......,以非终结符开头,该非终结符的Firstvt入Firstvt(A)

A->Ba.....,先以非终结符开头,紧跟终结符,则终结符入Firstvt(A)

这就是求FirstVt集合的所有情况。

④LastVt(A)

直观上来说就是求非终结符A产生式的最右一个终结符,但不同于Follow。

有以下几种情况:

A->.......a,即以终结符结尾,该终结符入Lastvt(A)
A->.......B,即以非终结符结尾,该非终结符的Lastvt入Lastvt(A)
A->.....aB,即先以非终结符结尾,前面是终结符,则终结符入Firstvt(A)

这就是求LastVt集合的所有情况。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值