求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 ...
随机推荐
- [日常工作]WorkStation 使用端口转发的方式使用宿主机IP地址提供服务
1. 虚拟机内的地址如果经常变化,或者是想使用宿主机进行网络服务 但是又不想有人能够访问具体的服务器提供机器.. 可以使用宿主机转发虚拟机的端口的方式来进行处理. workstation 比较好实现 ...
- Laravel 常见错误 1071 Specified key was too long
Laravel 5.5 + Mysql 5.5 ,执行 migrate 时,提示索引长度超过指定的 1000 bytes 原因: Mysql 对索引有一定的长度限制,版本不同长度不同: MyIsAm ...
- PSP(4.27——5.3)以及周记录
1.PSP 4.27 11:40 18:10 125 265 Cordova A Y min 4.28 10:00 16:50 200 210 Cordova A Y min 4.29 15:30 2 ...
- scipy优化器optimizer
#optimazer优化器 from scipy.optimize import minimize def rosem(x): return sum(100.0*(x[1:]-x[:-1])**2.0 ...
- 一个很初级的错误 Destructor忘记override导致内存泄露
TxxObj= class public Destructor Destroy(); override;!!!此处若无override,将导致内存泄露 end; Destru ...
- 网页性能优化之异步加载js文件
一个网页的有很多地方可以进行性能优化,比较常见的一种方式就是异步加载js脚本文件.在谈异步加载之前,先来看看浏览器加载js文件的原理. 浏览器加载 JavaScript 脚本,主要通过<scri ...
- jquery 加載
load(url,data,callback)從遠程服務器加載數據,并放入到被選中元素上: url是必須有的,希望加載的url: data是可選的,表示和請求一起發送的鍵值對數據: callback是 ...
- Bootstrap洼地
前面的话 这是一个轻量.灵活的组件,它能延伸至整个浏览器视口来展示网站上的关键内容.本文将详细介绍Bootstrap洼地 概述 洼地(Well)样式的效果和巨幕jumbotron样式类似,不同点是we ...
- Bootstrap按钮式下拉菜单
前面的话 按钮式下拉菜单仅从外观上看,和下拉菜单效果基本上是一样的.不同的是普通的下拉菜单是block元素,而按钮式下拉菜单是inline-block元素.本文将详细介绍Bootstrap按钮式下拉菜 ...
- unwrap bug
https://cn.mathworks.com/matlabcentral/newsreader/view_thread/93276