经过前阵子的各种百度以及对课本的反复研究,终于弄明白了follow集的求法,下面记录一下!

首先引用龙书里面的一段较为公式化的follow集求法的话:

计算所有非终结符号A的follow(A)集合时,不断应用下面的规则,直到再没有新的终结符号可以被加入到任意的follow集合中为止。

(1)将

放到follow(S)中,其中S是开始符号,而
是输入右端的结束标记。

(2)如果存在一个产生式A→αBβ,那么first(β)中除ε之外的所有符号都在follow(B)中。

(3)如果存在一个产生式A→αB,或存在产生式A→αBβ且first(β)包含ε,那么follow(A)中的所有符号都在follow(B)中。

下面举个例子来说明下,假设有如下文法:

①E→TE’

②E’→+TE’ | ε

③T→FT’

④T’→*FT’ | ε

⑤F→(E)| id

对于每个非终结符号,我们都可以求出其follow集:

根据(1),首先将

加入到follow(E)中,即follow(E)={
},由⑤可知,)也应该在follow(E)中,即follow(E)={$,)};

对于E’,根据规则(3)以及产生式①,应该将follow(E)加入到follow(E‘)中,即follow(E’)={$,)};

对于T,根据规则(2)以及产生式①,应该将first(E’)加入到follow(T)中,即follow(T)={+},根据规则(3),由于first(E’)包含ε,所以应该将follow(E)加入到follow(T)中,即follow(T)={+,$,)};

对于T’,根据规则(3)以及产生式③,应该将follow(T)加入到follow(T‘)中,即follow(T’)={+,$,)};

对于F,根据规则(2)以及产生式③,应该将first(T’)加入到follow(F)中,即follow(F)={},根据规则(3),由于first(T’)包含ε,所以应该将follow(T)加入到follow(F)中,即follow(F)={,+,$,)};

以下是我自己对Follow集的理解,非转载内容:
Follow 集实际上就是我们父亲节点的兄弟节点的First集合。但是这不是全部。

编译原理中Follow集的求法的更多相关文章

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

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

  2. first集合follow集的求法

    FIRST集的定义 : 设G=(VT,VN,P,S)是上下文无关文法 FIRST(a)={a|a=>*ab,a∈VT, a,b∈V*} 若a=>*ε则规定ε∈FIRST (a) FIRST ...

  3. 编译原理中DFA最小化

    关于编译原理最小化的操作,专业术语请移步至:http://www.360doc.com/content/18/0601/21/11962419_758841916.shtml 这里只是记录一下个人的理 ...

  4. FIRST 集与 FOLLOW 集

    文法: S→ABc A→a|ε B→b|ε First 集合求法: 能 由非终结符号推出的所有的开头符号或可能的ε,但要求这个开头符号是终结符号.如此题 A 可以推导出 a 和ε,所以 FIRST(A ...

  5. 【编译原理】语法分析LL(1)分析法的FIRST和FOLLOW集

    近来复习编译原理,语法分析中的自上而下LL(1)分析法,需要构造求出一个文法的FIRST和FOLLOW集,然后构造分析表,利用分析表+一个栈来做自上而下的语法分析(递归下降/预测分析),可是这个FIR ...

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

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

  7. FIRST集和FOLLOW集

    省略号代表其他相关产生式得出的终结符号,一开始的时候,省略号里面是没有的   求FIRST集 情况壹  如果A只在→的右边出现,那么FIRST(A)={A},例子M→α,FIRST(α)={α} 情况 ...

  8. 简单的FOLLOW集演示程序

    /* * 该程序用于计算某个非终结符的 FOLLOW 集合 * RexfieldVon * 2013年6月30日16:02:47 */ #include <stdio.h> #includ ...

  9. 求FIRST集和FOLLOW集

    花了点时间弄了个大概,希望对和我一样的人有所帮助.   文法如下: E -> TE'E' -> +TE'|εT -> FT'T' -> *FT'|εF -> (E)|id ...

随机推荐

  1. 深入HTML5第三天

    表单form属性:method="get|post" action="url": 特性:不写样式是没有样式的 input:属性:type="text| ...

  2. YOLO v3 & Pascal VOC数据集

    代码地址:https://github.com/YunYang1994/tensorflow-yolov3 https://hackernoon.com/understanding-yolo-f5a7 ...

  3. AT4119-[ARC096C]Everything on It【斯特林数,容斥】

    正题 题目链接:https://www.luogu.com.cn/problem/AT4119 题目大意 一个集合\(S=\{k\in[1,n]\cup N\}\),它的所有子集作为元素组成的集合中要 ...

  4. Incorrect datetime value: 时间添加失败原因

    在进行单元测试中通过 new Date() 方式添加时间时,报了 Data truncation: Incorrect datetime value:这样的错误(我数据库表的时间类型是 datetim ...

  5. Spring源码之AOP的使用

    Spring往期精彩文章 Spring源码搭建 Spring源码阅读一 前言 我们都知道Java是一门面向对象(OOP)的语言,所谓万物皆对象.但是它也存在着一些个弊端:当你需要给多个不具有继承关系的 ...

  6. 阿里云函数计算发布新功能,支持容器镜像,加速应用 Serverless 进程

    我们先通过一段视频来看看函数计算和容器相结合后,在视频转码场景下的优秀表现.点击观看视频 >> FaaS 的门槛 Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容.运维. ...

  7. java课堂测试3第一部分(未完善)

    package test3;import java.util.*; public class Grade2 { static String[][] mis=new String[500][4]; // ...

  8. GoLang设计模式11 - 备忘录模式

    备忘录模式是一种行为型设计模式.这种模式允许我们保存对象在某些关键节点时的必要信息,以便于在适当的时候可以将之恢复到之前的状态.通常它可以用来帮助设计撤销/恢复操作. 下面是备忘录设计模式的主要角色: ...

  9. javaweb 入门

    java web 我们首先来看一下两种网络服务的常用架构. C/S([Client/Server])架构 B/S架构 (Browser/Server) (这是重点) 程序完全部署在服务器上,用户通过浏 ...

  10. C++ 与 Visual Studio 2022 和 WSL(五)——WSL2

    Build and Debug C++ with WSL 2 Distributions and Visual Studio 2022 References Build and Debug C++ w ...