编译原理 first集 follow集 实例 解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 编译原理 first集 follow集 实例 解析

编译原理只看书的话还是很难学,上课听老师讲的蛮好,可忘得也很快,再复习看书的时候已然忘记老师当时是怎么讲的了QAQ...

现在只能在网上找教程自学一下喽:先看看为什么要有first集和follow集:

efcdc2d50a1e062e0af23224ab319739_70.png

0db49c82f5b77f943749d38ccf043f57_70.png

8ac5e1056292555162374f0db944962f_70.png      

e1bc5d0270ba9dcdaa9dc06bcfdf5da8_70.png

55a1c45cf1fa17dcd9b9f13ac6f5723b_70.png

      这个很简单了,x是终结符,那它的FIRST集肯定也是x了。

82c171ca180e5006365474c07724f155_70.png

      举个栗子::Y->b|ε,那么First (Y)={b, ε}(b是终结符)

14d6e3b6780b173e27e98520ee2cc760_70.png

       举个栗子:Y->b|ε,那么First (Y)={b, ε}(b是终结符),X->Yabcd|ε,则FIRST(X) = (First(Y)--{ε})∪ {ε}(这

       里的{ε}是由法则2 3222cdf7119ba4cbd405574da971ab79_70.png 推导出来 )

  69a8da55f1783589ce69e9f6fec1d0bb_70.png892bfb8e852c53000633940e5c5c1dab_70.pnga0111670b283ad2372ccd58a001f3d70_70.png

        举个栗子:

1、文法G [S]为:

SAB                                  First(S) =(First(A)-{ε})∪(First (B)-{ε}) ∪{ε}∪{b}

SbC                                   因为A的first有ε,B的first有ε,S->AB,所以是First(A)-{ε})∪(First (B)-{ε}) ∪{ε}
A→ε         然后S->bC由法则2得,所以再加一个b就是First(A)-{ε})∪(First(B)-{ε})∪{ε}
Ab                                    ∪{b}

B→ε          由之前的法则:First (A)={b, ε}First (B)={a, ε}所以First(S) ={a,b,ε}

BaD

CAD

Cb

DaS

Dc

bb68ccc77056e98f6589da2afc7fc936_70.png

   1ee9f73b974ad6cd4fe62aa04820b05d_70.png

   FOLLOW集就是找后面有没有能处理这个终结符的非终结符,如果有就继续,没有则报错!所以此处我们的视角和求解first集的视角有所不同,此时我们应该向后看,找后面的。

af43412167c4f3f32c7645a51fd43b23_70.png

f7b0ba62653ac89458e9f9000b2030eb_70.png

       这个不用多说,初始规定就是这样。

cfba42b1325d86efadfe265d2cee2779_70.png

       举个栗子:文法G [E]为:    

                  E   →  TE'          因为E是文法的识别符所以把#加入FOLLOW(E),又由规则F  →  (E) | i 得E

                  E'  →  +TE' | ε    的后跟符号  )(  first(')') = {)}  ) ,所以,FOLLOW(E)={ #,) };

                  T   →  FT'

                  T'  →  *FT' | ε

                  F  →  (E) | i

a9530a001bc680c522d1d159d24dcad6_70.png

         举个栗子:文法G [E]为:    

                  E   →  TE'          先给出它们的FIRST集:(求解方法见上面FIRST集的求解)

                  E'  →  +TE' | ε            FIRST(F)={ (,i }

                  T   →  FT'                    FIRST(T’)={ *,ε }

                  T'  →  *FT' | ε             FIRST(T) ={ (,i }

                  F  →  (E) | i                 FIRST(E’)={ +,ε }

                                                  FIRST(E)={ (,i }

FOLLOW集的求解:因为E是文法的识别符所以把#加入FOLLOW(E),又由规则F  →  (E) | i 得E的后跟符号),所以,FOLLOW(E)={ #,) };

FOLLOW(E’)={ #,) }    ∵E → TE’   follow集的目的是为了在E'无法处理当前终结符的时候,判断E'之后有没有能处理该终结符的非终结符,    ∴FOLLOW(E)加入 FOLLOW(E')

FOLLOW(T)={+,),#}      ∵E'→ +TE’  ∴FIRST(E’)-{ε}加入FOLLOW(T); 又E’→ε,     ∴ FOLLOW(E’)加入FOLLOW(T)此处如果把E'->+TE'看为A->aBb,b=>ε的话,则Follow(E')加入Follow(E')中,这样没有任何意义。

FOLLOW(T’)= FOLLOW(T)= {+,),#}      ∵T → FT’   ∴ FOLLOW(T)加入FOLLOW(T’)
FOLLOW(F)={*,+,),#}   ∵T → FT’   ∴ FOLLOW(F)=FIRST(T’)-{ε} ; 又T’→ε ∴ FOLLOW(T)加入FOLLOW(F)

       


AIEarth是一个由众多领域内专家博主共同打造的学术平台,旨在建设一个拥抱智慧未来的学术殿堂!【平台地址:https://devpress.csdn.net/aiearth】 很高兴认识你!加入我们共同进步!

目录
相关文章
|
4天前
|
存储 Java 计算机视觉
Java二维数组的使用技巧与实例解析
本文详细介绍了Java中二维数组的使用方法
27 15
|
2天前
|
存储 运维 资源调度
阿里云服务器经济型e实例解析:性能、稳定性与兼顾成本
阿里云经济型e云服务器以其高性价比、稳定可靠的性能以及灵活多样的配置选项,成为了众多企业在搭建官网时的首选。那么,阿里云经济型e云服务器究竟怎么样?它是否能够满足企业官网的搭建需求?本文将从性能表现、稳定性与可靠性、成本考虑等多个方面对阿里云经济型e云服务器进行深入剖析,以供大家参考选择。
|
2月前
|
存储 负载均衡 监控
数据库多实例的深入解析
【10月更文挑战第24天】数据库多实例是一种重要的数据库架构方式,它为数据库的高效运行和灵活管理提供了多种优势。在实际应用中,需要根据具体的业务需求和技术环境,合理选择和配置多实例,以充分发挥其优势,提高数据库系统的性能和可靠性。随着技术的不断发展和进步,数据库多实例技术也将不断完善和创新,为数据库管理带来更多的可能性和便利。
133 57
|
1月前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
126 5
|
1月前
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
68 5
|
2月前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c8i实例解析:实例规格性能及使用场景和最新价格参考
计算型c8i实例作为阿里云服务器家族中的重要成员,以其卓越的计算性能、稳定的算力输出、强劲的I/O引擎以及芯片级的安全加固,广泛适用于机器学习推理、数据分析、批量计算、视频编码、游戏服务器前端、高性能科学和工程应用以及Web前端服务器等多种场景。本文将全面介绍阿里云服务器计算型c8i实例,从规格族特性、适用场景、详细规格指标、性能优势、实际应用案例,到最新的活动价格,以供大家参考。
|
3月前
|
XML 数据格式
HTML 实例解析
本文介绍了HTML中常见元素的使用方法,包括`<p>`、`<body>`和`<html>`等。详细解析了这些元素的结构和作用,并强调了正确使用结束标签的重要性。此外,还提到了空元素的使用及大小写标签的规范。
|
4月前
|
数据可视化 Python
Python绘制基频曲线——实例解析与应用探讨
Python绘制基频曲线——实例解析与应用探讨
74 9
|
3月前
|
数据可视化 Python
Python绘制基频曲线——实例解析与应用探讨
Python绘制基频曲线——实例解析与应用探讨
30 0
|
5月前
|
开发者 测试技术 Android开发
Xamarin 开发者的五大常见问题及解决方案:从环境搭建到性能优化,全面解析高效跨平台应用开发的技巧与代码实例
【8月更文挑战第31天】Xamarin 开发者常遇问题及解决方案覆盖环境搭建至应用发布全流程,助新手克服技术难关。首先需正确安装配置 Visual Studio 及 Xamarin 支持,设置 iOS/Android 测试环境。利用 Xamarin.Forms 和 XAML 实现高效跨平台开发,共享 UI 和业务逻辑代码。针对性能优化,采取减少 UI 更新、缓存计算结果等措施,复杂问题则借助 Xamarin Profiler 分析。
68 0

热门文章

最新文章

推荐镜像

更多