转载地址

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

编译原理——求解First,Follow,Firstvt和Lastvt集合的更多相关文章

  1. 编译原理LL1文法Follow集算法实现

    import hjzgg.first.First; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set ...

  2. 编译原理-First集和Follow集

    刚学first集和follow集的时候,如果上课老师没有讲明白或者自己没听明白,自己看的时候还真是有点难理解,不过结合着具体的题目可以理解的更快. 先看一下两种集合的求法: First集合的求法:   ...

  3. 编译原理 First集和Follow集的求法

    转载地址 https://blog.csdn.net/Alexander_Frank/article/details/51280798 自上而下分析: FIRST集求法 First集合最终是对产生式右 ...

  4. 编译原理: FIRST(x) FOLLOW(x) SELECT(x)的计算

    目录 First计算 Follow计算 Select计算 已知文法G[S]: S→MH|a H→LSo|ε K→dML|ε L→eHf M→K|bLM 判断G是否是LL(1)文法. First计算 F ...

  5. 编译原理 First,Follow,select集求法

    参考:https://blog.csdn.net/CooperNiu/article/details/78524688

  6. 《编译原理》-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集

    <编译原理>-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集 上一篇:编译原理-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 本 ...

  7. 《编译原理》求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析

    <编译原理>求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析 算符优先关系表的构造中涉及到求 FIRSTVT 集和 LASTVT 集. 表示及含义: FIRSTVT(T) 非 ...

  8. (转)混乱的First、Follow、Firstvt和Lastvt

    转自: http://dongtq2010.blog.163.com/blog/static/1750224812011520113332714/ 学编译原理的时候,印象最深的莫过于这四个集合了,而且 ...

  9. FIRST集和FOLLOW集,FIRSTVT集和LASTVT集的求法

    学习编译原理时, 这几个集合相信大家并不陌生:FIRST.FOLLOW.FIRSTVT.LASTVT. 其中First和Follow是一对,而Firstvt和Lastvt是一对. 它们的作用分别是: ...

随机推荐

  1. 集训作业 洛谷P1469 找筷子

    这个题的代码真的是短的不得了呢. 有个神奇的东西叫异或,写起来是这个样子的^. 这个东西可以查看2个数的二进制某位是否相同,相同取0,不同取1.虽然我用的不熟,但我可以想出来,如果2个相同的数异或,答 ...

  2. P1100 高低位切换

    这个题很简单 直接用左移位(<<)和右移位(>>)就可以过了 #include<iostream> #include<cstdio> using nam ...

  3. python基础算法

    一.简介 定义和特征 定义:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时 ...

  4. ajax原生js封装

    不带注释的 function ajax(json) { json.type = json.type ? json.type : 'get'; json.async = json.async == fa ...

  5. 谷歌浏览器又隐藏的HTTPS和WWW前缀

    谷歌工程师 Emily Schechter 曾在 Chromium 反馈页面中提到:Chrome 团队一直将简易性.可用性.安全性作为衡量 UI 的标准.为了让 URL 能更好地被用户理解.移除那些容 ...

  6. [spring cloud] -- 核心篇

    核心功能: 分布式/版本化配置 服务注册合发现 服务路由 服务和服务之间的调用 负载均衡 断路器 分布式消息传递 ...... 技术体系 组件 服务注册与发现组件:Eureka.Zookeeper和C ...

  7. DJANGO-天天生鲜项目从0到1-006-首页-内容展示

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  8. Mybatis(四)多表操作

    数据库如下: 一.创建数据库所对应的bean类 public class User { private Integer uId; private String username; private St ...

  9. 在CentOS下安装两个Tomcat

    在CentOS下安装两个Tomcat [版权声明:本文为博主原创文章,转载请说明出处.希望能和大家共同学习] 1.不同的tomcat启动和关闭监听不同的端口 2.不同的tomcat的启动文件start ...

  10. Redis的事件机制

    目录 一.Redis的运行过程 二.事件数据结构 2.1 文件事件数据结构 2.2 事件事件数据结构 3.3 事件循环 三.事件的注册过程 3.1 文件事件的注册过程 3.2 时间事件的注册过程 四. ...