求FIRST集和FOLLOW集
文法如下:
E -> TE'
E' -> +TE'|ε
T -> FT'
T' -> *FT'|ε
F -> (E)|id
----------------------------------------------------------------------------------------------------------------------------------------------------
FIRST集:由非终结符号推出的所有的开头符号或ε
规则:终结符的FIRST集,即是他本身。
所以,FIRST(+) = {+}, FIRST(*) = {*}, FIRST(id) = {id}, FIRST(() = {(}, FIRST()) = {)}
FIRST(E): 列出与E相关的产生式: E->TE' T -> FT' F -> (E)|id,
显然,F->( / id, T-> ( / id, 所以,FIRST(F) = {(,id}, FIRST(T) = {(,id}, FIRST(E) = {(,id}
FIRST(E') = {+,ε}
FIRST(T') = {*,ε}
FOLLOW集:紧跟随其后面的终结符号或#
和FIRST集不同的是:FOLLOW集只是针对非终结符而言,因为FIRST集和FOLLOW集设计的初衷就是
根据当前句型的最左语法变量A和当前输入符号a可以唯一的选择A的候选式αi来替换A,
从而实现对G的句子进行确定的自顶向下分析。所以终结符可以直接与输入符号进行匹配,不需要FOLLOW集。
实现:把所有包含你要求的符号的产生式都找出来。
FOLLOW(E): F -> (E)|id, E后面就是),其他包含E的都没有,所以FOLLOW(E)={),#}
FOLLOW(E'): 由 E -> TE' 和 F -> (E)|id 推出 F -> (TE')|id ,所以FOLLOW(E)={),#}
FOLLOW(T): 由 E -> TE' 和 E' -> +TE'|ε ,T后面是E' (即:+TE'|ε),所以,T有+,
再根据F -> (E)|id E -> TE' 推出 F -> (TE')|id,当 E' -> ε时,T后面是),所以,T有 ).
故FOLLOW(T) = {+,),#}
FOLLOW(T'): 由 E -> TE' 和 F -> (E)|id 推出 F -> (TE')|id,且 T -> FT',所以 F -> (FT'E')|id
T' 后面紧跟 E',E' -> +TE'|ε,当E' -> +TE'时,T' 有 +。当E' -> ε 时,T' 有 )
故FOLLOW(T') = {+,),#}
FOLLOW(F): 由 E -> TE' 和 F -> (E)|id 推出 F -> (TE')|id,且 T -> FT' ,T' -> *FT'|ε,所以 F -> (FT'E')|id
当 T' -> *FT'时,F有 *,当T' -> ε时,F后紧跟E',当E' -> +TE'时,F有 +,当E' -> ε时,F 有 )
故FOLLOW(F) = {*,+,),#}
求FIRST集和FOLLOW集的更多相关文章
- 编译原理-First集和Follow集
刚学first集和follow集的时候,如果上课老师没有讲明白或者自己没听明白,自己看的时候还真是有点难理解,不过结合着具体的题目可以理解的更快. 先看一下两种集合的求法: First集合的求法: ...
- 《编译原理》求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析
<编译原理>求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析 算符优先关系表的构造中涉及到求 FIRSTVT 集和 LASTVT 集. 表示及含义: FIRSTVT(T) 非 ...
- FIRST集和FOLLOW集
省略号代表其他相关产生式得出的终结符号,一开始的时候,省略号里面是没有的 求FIRST集 情况壹 如果A只在→的右边出现,那么FIRST(A)={A},例子M→α,FIRST(α)={α} 情况 ...
- 编译原理 First集和Follow集的求法
转载地址 https://blog.csdn.net/Alexander_Frank/article/details/51280798 自上而下分析: FIRST集求法 First集合最终是对产生式右 ...
- FIRST集和FOLLOW集,FIRSTVT集和LASTVT集的求法
学习编译原理时, 这几个集合相信大家并不陌生:FIRST.FOLLOW.FIRSTVT.LASTVT. 其中First和Follow是一对,而Firstvt和Lastvt是一对. 它们的作用分别是: ...
- first集合follow集的求法
FIRST集的定义 : 设G=(VT,VN,P,S)是上下文无关文法 FIRST(a)={a|a=>*ab,a∈VT, a,b∈V*} 若a=>*ε则规定ε∈FIRST (a) FIRST ...
- 编译原理中Follow集的求法
经过前阵子的各种百度以及对课本的反复研究,终于弄明白了follow集的求法,下面记录一下! 首先引用龙书里面的一段较为公式化的follow集求法的话: 计算所有非终结符号A的follow(A)集合时, ...
- 怎样求FIRST集、FOLLOW集和SELECT集
一,要知道什么是终结符和非终结符. 终结符:通俗的说就是不能单独出现在推导式左边的符号,也就是说终结符不能再进行推导. 非终结符:不是终结符的都是非终结符.(非男即女,呵呵) 如:A-->B,则 ...
- 【编译原理】语法分析LL(1)分析法的FIRST和FOLLOW集
近来复习编译原理,语法分析中的自上而下LL(1)分析法,需要构造求出一个文法的FIRST和FOLLOW集,然后构造分析表,利用分析表+一个栈来做自上而下的语法分析(递归下降/预测分析),可是这个FIR ...
随机推荐
- Docker 修改默认存储路径的一个方法
1. 前期安装创建centOS的虚拟机时发现自己对linux的挂载点不清楚, 造成挂载点的分配不太均匀,如图: root / 节点的大小设置的比较小 /home路径设置的一直比较大 但是docker ...
- php函数值传值/地址以及引用的用法
博客摘自 奔跑的大白,网址: http://www.cnblogs.com/gauze/p/5568867.html 1.先来解释一下名词. 值传递(passl-by-value)过程中,被调函数的 ...
- 当返回值为json字符串时 如何获得其中的json数组
json数据格式 {"IPPORT":"192.168.0.12","time":"2017-04-05 09:12:06&quo ...
- BZOJ1775[USACO 2009 Dec Gold 3.Video Game Troubles]——DP
题目描述 输入 * 第1行: 两个由空格隔开的整数: N和V * 第2到第N+1行: 第i+1行表示第i种游戏平台的价格和可以在这种游戏平台上面运行的游 戏.包含: P_i, G_i还有G_i对由空格 ...
- BZOJ3771 Triple(FFT+容斥原理)
思路比较直观.设A(x)=Σxai.先把只选一种的统计进去.然后考虑选两种,这个直接A(x)自己卷起来就好了,要去掉选同一种的情况然后除以2.现在得到了选两种的每种权值的方案数,再把这个卷上A(x). ...
- MT【36】反函数有关的一道题
解答:$\frac{7}{2}$ 做适当的变换,再令$x-1=t$容易划归到我们熟悉的题型,$2^t=\frac{3}{2}-t,log_2t=\frac{3}{2}-t$作图或者利用函数单调性可得$ ...
- Android教程:在百度地图上画出轨迹
[日期:2013-04-14] 来源:Linux社区 作者:crazyxin1988 [字体:大 中 小] 接着上面的项目<Android访问webservice.客户端登录注册> ...
- pacman安装软件包出现损坏
状况 File .pkg.tar.xz is corrupted (invalid or corrupted package (PGP signature)).Do you want to delet ...
- A1020. Tree Traversals
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i ...
- A1061. Dating
Sherlock Holmes received a note with some strange strings: "Let's date! 3485djDkxh4hhGE 2984akD ...