博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FIRST集和FOLLOW集,FIRSTVT集和LASTVT集的求法
阅读量:6376 次
发布时间:2019-06-23

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

学习编译原理时, 这几个集合相信大家并不陌生:FIRST、FOLLOW、FIRSTVT、LASTVT。

其中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,即先以非终结符结尾,前面是终结符,则终结符入Lastvt

转载于:https://www.cnblogs.com/asche/p/10981400.html

你可能感兴趣的文章
二叉树递归与非递归遍历(附完整源码)
查看>>
ios开发系列-UITableController-动态页面
查看>>
sublime中BracketHighlighter 插件使用
查看>>
ROS 2编写包并用colcon编译
查看>>
gitlab重置root的密码
查看>>
关于C/C++中,对static关键字的理解
查看>>
Tomcat 5常用优化和配置
查看>>
几个性能测试工具
查看>>
(转)丰田公司精益管理的14项原则- [Lean and Agile]
查看>>
开发进度——2
查看>>
Java基础语法之Java初识
查看>>
Java Socket编程基础知识
查看>>
jenkins忘记管理员账号密码的补救方法-转
查看>>
jQuery基础三
查看>>
已Access为支持,书写一个C#写入的记录的方案
查看>>
JavaScript自适应调整文字大小
查看>>
实验报告一:网络侦查与网络扫描
查看>>
.net 接入微信商户企业支付API 问题总结
查看>>
防止SQL注入
查看>>
java中的动态代理(三)
查看>>