马上要期末考试了,临考前紧急自救一下,嘻嘻嘻

有穷自动机

转换图:

初始状态(开始状态):只有一个,用start箭头指向

终止状态(接受状态):可以有多个,用双圈表示

最长子串匹配原则:当输入串的多个前缀与一个或多个模式匹配时,总是选择最长的前缀进行匹配

确定的有穷自动机(DFA):

根据转换表画出转换图

不确定的有穷自动机(NFA):

存在进入一个状态集合的情况,NFA可存在空边

DFA与NFA存在等价性

NFA转换为DFA:

课本P50-P52

有穷自动机的化简:没有多于状态并且它的状态中没有两个是互相等价的。一个有穷自动机可以通过消除无用状态和合并等价状态而转换为一个与之等价的最小状态的有穷自动机。

无用状态:从该自动机的开始状态出发,任何输入状态也不能到达的那个状态,或者从这个状态没有通路到达终态。

等价状态:

(1)状态s和t必须同时为可接受状态或不可接受状态。

(2)对于所有的输入符号,状态s和状态t必须转换到等价的状态里

https://www.jianshu.com/p/c779953434ac

文法转换

1
2
3
S->aAd|aBe
A->c
B->b

输出abc就会出错,无法判断

同一非终结符的多个候选式存在共同前缀,将导致回溯现象

回溯解决:

提取左公因子

1
2
3
4
S->aS'
S'->Ad|Be
A->c
B->b

含有A->Aa形式的产生式的文法成为是直接左递归的,经过两步或两步以上推导产生的左递归成为是间接左递归的

消除直接左递归

左递归转换为右递归A->Aa A’->aA’

方法:

1
2
3
A->Aa|b
A->bA'
A'->aA'|空
kn5EcR.png

消除间接左递归

思路:将间接左递归转换为直接左递归

kn5KQ8.png

FIRST集与FOLLOW集的计算

FIRST(X):

(1)可以从X推导出的所有串首终结符构成的集合

(2)如果X可以推导出空,那么空也属于FIRST(X)

(3)若产生式的右部开头的是非终结符,那么该非终结符能推导出的FIRST集中的终结符就是该产生式的FIRST集

(4)X->Y1Y2Y3Y4…..YK,如果空属于Y1,那么Y2FIRST集中的终结符就成为X的FIRST集的一部分,如果空也属于Y2,则Y3FIRST集中的终结符就成为X的FIRST集的一部分,依次递推,如果产生式右侧每个都能推导出空,那么空属于FIRST(X)

FOLLOW(A):

可能在某个句型中紧跟在A后边的终结符a的集合

(1)若是最开始的符号,讲“#”加入FOLLOW

(2)E->TE’,FIRST(E’)中的终结符属于FOLLOW(T)

(3)在(2)的情况下,如果E’可以推出空,那么FOLLOW(E)属于FOLLOW(T)

(4)在(2)的情况下, E‘为产生式的最右侧符号,那么FOLLOW(E)属于FOLLOW(E’)

(5)循环前4条,直到不出现各FOLLOW集不出现新的符号

LL(1)文法

如果产生式具有相同的左部,而SELECT互不相交,则是LL(1)文法

(1)若产生式 右部开始为非终结符,则SELECT集为该非终结符的FIRST集中的终结符,不含空

(2)若产生式右部开始符号为终结符,则SELECT集就是该终结符

(3)若产生式的右部为空,则SELECT集为左侧符号的FOLLOW集

LR(0)分析

LR(0)项目:右部某位置标有圆点的产生式称为相应文法的一个LR(0)项目(简称为项目)

空产生式只生成A-> .

首先要转换为增广文法。即添加新的产生式

LR(0)自动机:

自动机的每个状态都是项目集闭包。

规约状态下无后继状态

LR分析表:
ACTION对应终结符和#,GOTO对应非终结符

sn:将符号a、状态n压入栈

rn:用第n个产生式进行规约

LR(0)分析过程中的冲突:
移进/归约冲突和规约/规约冲突

如果分析表中没有动作冲突,那么给定的文法就被称为LR(0)文法

SLR分析

消解冲突:

仅对FOLOOW集的元素进行规约动作

LR(1)分析

相关文章
评论
分享
  • 动物产生式识别系统

    此次实验的开发模式为前后端分离的网站开发模式。其中前端技术栈以及用到的框架为vue-cli 3.X以及element。后端使用的为python以及flask。 话不多说,直接贴码: 前端核心代码: 123456789101112131...

    动物产生式识别系统
  • Windows下neo4j的安装

    neo4j是一个高性能的NOSQL图形数据库,他将结构化数据存储在网络上而不是表中。他是一个嵌入式的、基于磁盘的、具备完全的事物特性的Java持久化引擎,neo4j也可看做是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。——百度...

    Windows下neo4j的安装
  • java实现类FTP程序

    继承程序设计实验,实验说明如图所示: 集成程序设计实验 TCP实现首先说明下基于TCP实现的功能: (1)能够实现多用户的同时连接 (2)用户执行成功的命令会在其他用户终端上显式说明 (3)当前用户数以及在线情况会在服务端实时显...

    java实现类FTP程序
  • Java中的流

    流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入输出都是以流的方式进行。设备可以是文件、网络、内存等。 I/O字节流InputStream字节输入流OutputStream字节输出流用于以字节的形式读取和写入数...

    Java中的流
  • eclipse使用

    Eclipse是一个开放源代码的、基于Java的可拓展开发平台。 常用快捷键 快捷键 作用 alt+/ 代码快速补全 ctrl+1 快速修复 ctrl+shift+f 代码格式化 ctrl+d 删除一行代码 ...

    eclipse使用
  • Python网络编程

    网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。 它的含义是使用套接字来达到进程间的通信。套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。 套接字Socket=(IP地址:端口号) 端口号是...

    Python网络编程
  • Centos安装

    虚拟机下载及安装1.进入VMware官网,转到下载页面 https://my.vmware.com/cn/web/vmware/info/slug/desktop_end_user_computing/vmware_workstati...

    Centos安装
  • JavaEE开发准备

    个人电脑硬件配置: Windows 10 64位家庭中文版 8G运行内存 Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 1.Java JDK安装及配置(1)下载和安装首先进入oracle网站中Ja...

    JavaEE开发准备
  • Python进阶学习

    假期补习补习Python,防止以后用到炸锅。 闭包在Python语言中,一切皆对象。 闭包:一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。 闭包 = 函数 + 环境变量 123456789101...

    Python进阶学习
  • 推荐算法研究(一)

    推荐算法大体分为3类:基于系统过滤的推荐、基于内容的推荐、混合推荐 1.基于协同过滤的推荐系统(Collaborative Filtering)使用行为数据,利用集体智慧来推荐。属于有监督学习。基于用户的协同过滤(找和你兴趣相似的人所...

    推荐算法研究(一)
Please check the comment setting in config.yml of hexo-theme-Annie!