FIRST集合、FOLLOW集合、SELECT集合以及预测分析表地构造
FIRST集合、FOLLOW集合、SELECT集合以及预测分析表地构造
FIRST集合的简单理解就是推导出的字符串的开头终结符的集合。
FOLLOW集合简单的理解就对于非终结符后面接的第一个终结符。
给定一个由终结符和非终结符组成的字符串,FIRST(
FIRST(
FOLLOW(X)是可直接跟随与X之后的终结符集合。也就是说,如果存在着任一推导包含Xt,则t∈FOLLOW(X)。当推导包含XYZt,其中Y和Z都推导出时,也有t∈FOLLOW(X)
FIRST、FOLLOW和nullable的迭代计算
计算FIRST、FOLLOW和nullable的算法
将所有的FIRST喝FOLLOW初始为空集合,将所有的nullable初始为false
for 每一个终结符Z
FIRST[Z]←{Z}
repeat
for 每个产生式X→
for 每个i从1到k,每个j从i+1到k。
if 所有都可为空的
then nullable[x] ←true
if 都是可为空的
then FIRST[X] ←FIRST[x]∪FIRST[]
if 都是可为空的
then FOLLOW[] ←FOLLOW[]∪FOLLOW[X]
if 都是可为空的
then FOLLOW [] ←FOLLOW[]∪FIRST[]
until FIRST、FOLLOW和nullable在此轮迭代中没有改变
例子如下

第一轮迭代如下



构造一个预测分析器
考虑一个递归下降分析器。费终结符X的分析函数对X的每个产生式都有一个子句,因此,该函数必须根据下一个输入单词T来选择其中的一个子句。如果能够为每一个(X,T)选择出正确的产生式,我们就能够写出这个递归下降分析器。我们需要的所有信息可以用一张关于产生式的二维表来表示,此表以文法的非终结符X和终结符T作为索引。这张表称为预测分析表(predictive parsing table)。预测分析表可以由Select集合构造
Select集合:
Select集合就是产生式左部的可能的推导结果的起始符号。
Select(A–>B)就是求这个产生式中A可能推导出起始符号集合(不包含空串ε)。
求Select集合可分如下几种情况:
A–>X (X为任意文法符号串,不限于非终结符或单个符号),并且X不能推导出空串 ε
根据定义,显然A推出的符号串起始就是X的起始,也就是First(X).
Select(A–>X)= First(X)
A–>X (X为任意文法符号串,不限于非终结符或单个符号),并且X能推导出空串ε
根据定义,显然First(X)属于Select(A–>X),此外,当X推导为空串时,显然A 也推导为空串,那么此时推导出的符号串就会是A后面的符号的推导结果。也就是 Follow(A),所以,此时Follow(A)也属于Select(A–>X)。


FIRST集合、FOLLOW集合、SELECT集合以及预测分析表地构造的更多相关文章
- 语法设计——基于LL(1)文法的预测分析表法
实验二.语法设计--基于LL(1)文法的预测分析表法 一.实验目的 通过实验教学,加深学生对所学的关于编译的理论知识的理解,增强学生对所学知识的综合应用能力,并通过实践达到对所学的知识进行验证.通过对 ...
- 《编译原理》-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法
<编译原理>-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 此编译原理确定某高级程序设计语言编译原理,理论基础,学习笔记 本笔记是对教材< ...
- jq操作select集合
jq操作select集合 时间:2012年12月07日分类:Javascript 最近一段时间发现,老是要跟select,option相关的东西打交道,而且有的时候还会搞错,于是,抽了一点时间整理了一 ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- 【集合框架】JDK1.8源码分析之LinkedList(七)
一.前言 在分析了ArrayList了之后,紧接着必须要分析它的同胞兄弟:LinkedList,LinkedList与ArrayList在底层的实现上有所不同,其实,只要我们有数据结构的基础,在分析源 ...
- 【集合框架】JDK1.8源码分析之Collections && Arrays(十)
一.前言 整个集合框架的常用类我们已经分析完成了,但是还有两个工具类我们还没有进行分析.可以说,这两个工具类对于我们操作集合时相当有用,下面进行分析. 二.Collections源码分析 2.1 类的 ...
- 第14章 集合框架(1)-List集合的各种类
1.概述 1.1.Java集合框架的由来 1.2.什么是集合框架? 1.3.为什么需要集合框架 1.4.常用的框架接口规范 2.Vector类 2.1.存储原理 2.2.构造方法 2.3.常用方法 3 ...
- 5月11日 ArrayList集合复习、特殊集合、枚举类型
一.ArrayList集合复习 //定义 ArrayList al = new ArrayList(); //添加元素 al.Add(); //插入元素 al.Insert(,); //查看个数 in ...
- Java集合概述、Set集合(HashSet类、LinkedHashSet类、TreeSet类、EnumSet类)
Java集合概述.Set集合(HashSet类.LinkedHashSet类.TreeSet类.EnumSet类) 1.Java集合概述1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指 ...
随机推荐
- bootmanager is missing
问题描述: 在计算机管理->存储->磁盘管理中,因误操作,将D盘设置了"将分区标记为活动分区(M)",导致重启时无法无法进入系统,提示"bootmanager ...
- JAVA中abstract,interface,final,static语法
转自:http://www.cnblogs.com/yueue/archive/2010/04/20/1715863.html 一,抽象类:abstract 1,只要有一个或一个以上抽象方法的 ...
- UML 顺序图(转载)
顺序图精确表达用户与系统的复杂交互过程. 顺序图用于描述进出系统的信息流. 顺序图与协作图是同构的,可以互相转换!!! 顺序图:着重体现对象间消息传递的时间顺序.顺序图允许直观的表示出对象的生存期,生 ...
- 202 Happy Number 快乐数
写一个算法来判断一个数是不是“快乐数”.一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,或是无限循环但始终变不到 1.如 ...
- 基于Windows7下snort+apache+php 7 + acid(或者base) + adodb + jpgraph的入侵检测系统的搭建(图文详解)(博主推荐)
为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习.人工智能.区域链研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物理机 ...
- 转】Nodejs对MongoDB模糊查询
原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/4/ 感谢! Posted: Jul 1, 2013 Tag ...
- node入门(一)——安装
node可以让我们用js写服务器.此外还可以用来前端自动化开发,它找到特定服务要使用的包,然后下载.安装.管理. 首先安装node,进入官网下载需要的node版本,然后一键式傻瓜安装.(我的环境是wi ...
- 用js的eval函数模拟Web API中的onclick事件
在检查组内小伙伴提交的tabToggler插件的js代码时,发现了onclick的如下用法: el.onclick = function(){ //按钮样式切换 for(var i=0;i<ob ...
- R in action 读书笔记(1)--第五章:高级数据管理
5.2.1数学函数 函数 描述 abs(x) 绝对值 sqrt(x) 平方根 ceiling(x) 不小于x的最小整数 floor(x) 不大于x的最大整数 trunc(x) 向0的方向截取的X中的整 ...
- 忘记dba用户密码,利用SQLPlus重置dba密码
打开SQL Plus 输入用户名: sys as sysdba 输入口令:可直接回车 连接到: Oracle Database 11g Enterprise Edition Release 11.2. ...