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集合以及预测分析表地构造的更多相关文章

  1. 语法设计——基于LL(1)文法的预测分析表法

    实验二.语法设计--基于LL(1)文法的预测分析表法 一.实验目的 通过实验教学,加深学生对所学的关于编译的理论知识的理解,增强学生对所学知识的综合应用能力,并通过实践达到对所学的知识进行验证.通过对 ...

  2. 《编译原理》-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法

    <编译原理>-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 此编译原理确定某高级程序设计语言编译原理,理论基础,学习笔记 本笔记是对教材< ...

  3. jq操作select集合

    jq操作select集合 时间:2012年12月07日分类:Javascript 最近一段时间发现,老是要跟select,option相关的东西打交道,而且有的时候还会搞错,于是,抽了一点时间整理了一 ...

  4. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

  5. 【集合框架】JDK1.8源码分析之LinkedList(七)

    一.前言 在分析了ArrayList了之后,紧接着必须要分析它的同胞兄弟:LinkedList,LinkedList与ArrayList在底层的实现上有所不同,其实,只要我们有数据结构的基础,在分析源 ...

  6. 【集合框架】JDK1.8源码分析之Collections && Arrays(十)

    一.前言 整个集合框架的常用类我们已经分析完成了,但是还有两个工具类我们还没有进行分析.可以说,这两个工具类对于我们操作集合时相当有用,下面进行分析. 二.Collections源码分析 2.1 类的 ...

  7. 第14章 集合框架(1)-List集合的各种类

    1.概述 1.1.Java集合框架的由来 1.2.什么是集合框架? 1.3.为什么需要集合框架 1.4.常用的框架接口规范 2.Vector类 2.1.存储原理 2.2.构造方法 2.3.常用方法 3 ...

  8. 5月11日 ArrayList集合复习、特殊集合、枚举类型

    一.ArrayList集合复习 //定义 ArrayList al = new ArrayList(); //添加元素 al.Add(); //插入元素 al.Insert(,); //查看个数 in ...

  9. Java集合概述、Set集合(HashSet类、LinkedHashSet类、TreeSet类、EnumSet类)

    Java集合概述.Set集合(HashSet类.LinkedHashSet类.TreeSet类.EnumSet类) 1.Java集合概述1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指 ...

随机推荐

  1. bzoj1415 [Noi2005]聪聪和可可【概率dp 数学期望】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1415 noip2016 D1T3,多么痛的领悟...看来要恶补一下与期望相关的东西了. 这是 ...

  2. 字符串处理 Codeforces Round #285 (Div. 2) B. Misha and Changing Handles

    题目传送门 /* 题意:给出一系列名字变化,问最后初始的名字变成了什么 字符串处理:每一次输入到之前的找相印的名字,若没有,则是初始的,pos[m] 数组记录初始位置 在每一次更新时都把初始pos加上 ...

  3. ACM_最小公倍数

    Lowest Common Multiple Plus Time Limit: 2000/1000ms (Java/Others) Problem Description: 求n个数的最小公倍数. I ...

  4. windows下Python的安装,以及IDLE的使用

    一.Python的下载安装 (1)python的windows安装包可以从https://www.python.org 网址中下载,可以下载3.4版本的或者2.7版本的.(2)下载后直接运行即可.然后 ...

  5. 转】Neo4j集群安装实践

    原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/2/ 感谢! Posted: Oct 29, 2013 Ta ...

  6. 《基于Node.js实现简易聊天室系列之项目前期工作》

    前期工作主要包括:项目的创建,web服务器的创建和数据库的连接. 项目创建 网上关于Node.js项目的创建的教程有很多,这里不必赘述.Demo所使用的Node.js的框架是express,版本为4. ...

  7. php接收json格式数据(text/xml)

    在API服务中,目前流行采用json形式来交互. 给前端调用的接口输出Json数据,这个比较简单,只需要组织好数据,用json_encode($array) 转化一下,前端就得到json格式的数据. ...

  8. ARC(Automatic Reference Counting )技术概述

    此文章由Tom翻译,首发于csdn的blog 转自:http://blog.csdn.net/nicktang/article/details/6792972 Automatic Reference ...

  9. sql发送邮件- html 格式

    ALTER PROCEDURE dbo.sx_pro_AutoEmailContent AS Begin declare @Rqty int declare @n int declare @m_rec ...

  10. 使用Win7 64位旗舰版光盘映像安装Windows Home basic 64位操作系统

    工作当中需要安装Windows home basic 64位操作系统,苦于手头没有该版本的安装光盘,也没时间下载其安装映像.因此,在现有资源“cn_windows_7_ultimate_with_sp ...