博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FIRST集和FOLLOW集,FIRSTVT集和LASTVT集总结
阅读量:2355 次
发布时间:2019-05-10

本文共 1235 字,大约阅读时间需要 4 分钟。

转载自:http://dongtq2010.blog.163.com/blog/static/1750224812011520113332714/

学编译原理的时候,印象最深的莫过于这四个集合了,而且也十分为之纠结。

首先要知道First和Follow是一对,而Firstvt和Lastvt是一对。

然后要知道这两对都是干什么的。

First和Follow是为了画预测分析表的(在LL(1)分析法处)。
而Firstvt和Lastvt是为了画算符优先关系表的(就是表里面填优先大于小于等于的那个)。

然后要注意他们可都是终结符的集合。


再就是他们如何构建的问题了

先说First和Follow

First

如A->aB | CD

这里面包含了组成First(A)的两种情况:

           以终结符开头,    当然要把这个终结符放到A的First里

           以非终结符开头, 先把C的First放到A的First里

                                        再看如果C的First中有空的话就把D的First放到A的First里,如果D也有空的话往后依次类推

技巧:
First一般从下往上找。

           如果要找A的First,我们要找A的定义式,即A在左边的式子,看着他的右边来找。


Follow

S->(L) | aL | LC   
找Follow的三种情况:
先在候选式(右边)中找到该非终结符,如L(注意例中只有一个定义,但找Follow要看到所有右边出现该非终结符的)

           如果L的右边是终结符,    那么这个终结符加入L的Follow

           如果L的右边是非终结符, 那么把这个非终结符的First除去空加到L的Follow中

           如果L处在末尾,               那么,'->'左边符号的Follow成为L的Follow

另外要注意的是:

           开始符号的Follow中要加上‘#’        

技巧:
Follow一般从上往下找。

           如果要找L的Follow,要从式子的右边找到L,然后来找L的Follow,这与First是不同的。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

再说下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
你可能感兴趣的文章
关于上拉刷新控件MJRefresh 上拉时当加载出来后仍会自动往上滑动的解决
查看>>
IOS开发之——objectForKey与valueForKey在NSDictionary中的差异
查看>>
setValue和setObject的区别
查看>>
加快XCode的编译链接速度(200%+)—XCode编译速度慢的解决方案
查看>>
AFNetWorking使用
查看>>
GCD延迟实现的动画 效果
查看>>
Mac也能读取Android设备文件
查看>>
xcode6 文档自动标注VVDocumenter更新后支持
查看>>
图片自适应uiimageview
查看>>
CGImageCreateWithImageInRect截图问题
查看>>
iOS程序安全-代码混淆
查看>>
iOS的主要框架介绍
查看>>
copy
查看>>
iPhone-NSAssert使用
查看>>
NSAssert用法
查看>>
关于 retainCount 的疑问
查看>>
xcode快捷键
查看>>
关于对时间的处理 (我自己的)
查看>>
iPad UIPopoverController弹出窗口的位置和坐标
查看>>
通过UIActivityViewController实现更多分享服务
查看>>