所有大写字母代表非终结符,小写字母代表终结符,省略号代表未知数目(可能为0)的不确定类型的文法符号。

  • First集合:

    First集合顾名思义就是求一个文法符号串所可能推导出的符号串的第一个终结符的集合。

    First(X)就是求X所有推导出的符号串的第一个符号的集合。

    求First集合可分如下几种情况:

    1、单个符号的First集合:单个终结符的First集合就是它自己。

    2、单个非终结符的First集合:

    A-->a… 产生式右部以终结符开头,根据定义,这种情况下显然可以看出a属于First(A)。A-->B… 产生式右部以非终结符开头,根据定义,既然可以把A替换成B……,也可以看出First(B)属于First(A)。这是一个递归的推导。

3、多个符号形成的符号串的First结合:

符号串ABC…,并且A不能推导出空串ε,显然根据定义First(ABC…)=First(A)符号串ABC…,并且A可能推导出空串ε,当A不是空串的时候,显然First(A)属于First(ABC…),但当A是空串的时候,ABC…就成了BC…,此时根据B是否能推出空串来决定是否将First(B)加入First (ABC…)。这是一个递归的推导,综上所述,符号串中的第一个不能推出空串的符 号前面所有符号的First集合减去空串ε都属于First(ABC…),第一个不能推出空串的 符号的First集合也属于First(ABC…)。也就是假设A、B都可以推出空串,C不能推 出空串,First(ABC…)=First(A)-ε∪First(B)-ε∪First(C)。注意:First集合中的符号一定是终结符,终结符也包括空串ε。

Follow集合:

  • Follow集合也是顾名思义的,就是文法符号后面可能跟随的终结符的集合(不包括空 串ε)。Follow(X)就是求X后面可能跟随的符号集合。求Follow集合可分如下几种情况:终结符的Follow集合没有定义,只有非终结符才会有Follow集合。

A–>…Ua… 要求的Follow集合的非终结符后跟终结符

  • 根据定义,显然a属于Follow(U)。这种情况下,Follow(U)和A没有任何关系,产 生式左边是什么无所谓。

A–>…UP… 要求的Follow集合的非终结符后跟非终结符

根据定义,显然P的第一个符号属于Follow(U),也就是First(P)属于Follow(U)

A–>…UP并且ε属于First(P) 要求的Follow集合的非终结符后跟非结尾的终结符, 并且结尾非终结符的First集合包含空串。

这是上一种情况的一种特例,除了要按上一种情况处理,First(P)属于Follow(U) 以外还要进行分析;因为当P推导为空串时,空串不能出现在Follow集合中,所以U 后面跟随的应该是P后面的东西,可P已经是结束的符号,此时U后面显然就是A后 面跟随的东西了。所以在这种情况下Follow(A)也属于Follow(U)

A–>…U 要求的Follow集合的非终结符在产生式结尾

这时候又要递归推导,U是A的结尾,所以U后面跟随的东西也就是A后面跟随的东 西。所以Follow(A)属于Follow(U)

注意:Follow集合中的符号一定是终结符,并且不能包括空串ε,而且定义开始符号 的Follow集合初始为{#(句子括号)}。

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)。

注意:Select集合中不包括空串ε,但有可能会包含#(句子括号)。

转载: https://blog.csdn.net/u014374031/article/details/50239667

编译原理的first、follow、select相关推荐

  1. 编译原理 First集 Follow集 select集 通俗易懂的讲解 + 实例

    #First集Follow集通俗易懂的讲解加实例 ##First 如A->aB | CD 这里面包含了组成First(A)的两种情况: 以终结符开头,当然要把这个终结符(a)放到A的First里 ...

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

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

  3. 编译原理-FIRST表-FOLLOW表-LL1表(含python代码)

    问题描述 给出产生式文法,根据文法描述得出其 FIRST 集.FOLLOW 集,若符合 LL(1) 文法,则求出其 LL(1)表格. 算法设计 FIRST 集设计 概念: FIRST 集由终结符和

  4. [编译原理]FIRST集合FOLLOW集的介绍和求解

    一.定义 1.FIRST集:看产生式左部 FIRST(α) = {a | α ⇒∗\stackrel{*}\Rightarrow⇒∗a···,a∈VTV_{T}VT​} FIRST(α)是α的所有可能 ...

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

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

  6. 最全!最完整的求first集和follow的代码!!!编译原理 FIRST集和FOLLOW集的求法 代码,程序,实验报告

    DEV C++ 项目实现 不会建项目的看这个-->如何创建项目 代码链接:https://pan.baidu.com/s/1VNdrSMXaKu3HI0UQ_TInUQ 提取码:b1qz 使用教 ...

  7. 【编译原理】FIRST集和FOLLOW集构造法速学

    编译原理速成大法 FIRST集和FOLLOW集构造法速成 FIRST FOLLOW FIRST集和FOLLOW集构造法速成 例:对于文法G(E) 首先像E,T,E',F这样的就是非终结符 +,*, ε ...

  8. 编译原理实验-LL1语法分析器(自动生成First集、Follow集求法)java实现

    编译原理实验-LL1语法分析器(自动生成First.Follow)java 博主在做实验时,参考众多他人代码,发现bug众多,在@moni_mm代码基础上,与伙伴把能看到的BUG都做出修正,同时增添了 ...

  9. 编译原理简单语法分析器(first,follow,分析表)源码下载

    编译原理(简单语法分析器下载) http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC ...

  10. 编译原理预测分析法c语言,编译原理预测分析法C语言的实验报告.doc

    题目:编写识别由下列文法所定义的表达式的预测分析程序. EàE+T | E-T | T TàT*F | T/F |F Fà(E) | i 输入:每行含一个表达式的文本文件. 输出:分析成功或不成功信息 ...

最新文章

  1. synchronized底层原理_你用过synchronized吗?它的底层原理是什么?Java经典面试题来了...
  2. 如何终止一个正在动态执行的命令
  3. 计算机安全完整性服务定义,计算机网络安全导论--5完整性保护.ppt
  4. C++版二叉树非递归遍历
  5. css property 和 attribute 的区别
  6. WPF 绑定StaticResource到控件的方法
  7. Python学习笔记(4):Python如何设置类似C语言静态函数
  8. MySQL的crash-safe原理详解
  9. ViewData 和 echarts用法
  10. 04-04 常用代理工具
  11. 与孩子一起学编程python_与孩子一起学编程(Python读书笔记3)
  12. from __future__ import的用法
  13. Java基本类型占用字节数(或 bit数)
  14. 光线微弯传感器matlab仿真,光纤压力与位移传感特性
  15. 论项目管理中的需求管理
  16. 大数据Hive(四):Hive查询语法
  17. 顺丰控股2019财报解读
  18. 隔空投送教程|如何将文件从iPhone或iPad空投到Mac计算机?
  19. 物联网实训室建设方案(2020完整版)
  20. 抖音服务器带宽有多大,才能每天6亿人同时刷?

热门文章

  1. spring boot利用controller来测试写的类
  2. NOIP2015运输计划
  3. Java学习之基本概念
  4. Redis学习手册(主从复制)
  5. 【openjudge】字符串排序
  6. C++序列化模拟三 -----酒后日志
  7. 使用actuator优雅地停止SpringBoot应用
  8. Linux下rpm安装git
  9. leveldb Arena分析(转载)
  10. C++继承之菱形继承