【编译原理学习笔记】3:正规式,正规集,确定的/不确定的有穷自动机

news/2024/6/17 18:40:09

以后*都表示前一个元素的闭包,就当写在了右上角。

正规式和正规集

3型文法(正规文法)所描述的正是终结符集上的正规集,而正规式(正则表达式)就是一种表示正规集的工具。

正规式可以是εΦ,对应的正规集是{ε}{Φ},还可以是终结符经过有限次闭包、或(要放到括号里)、连接得到的。正规式e表示的正规集记作L(e)

当两个正规式所表示的正规集相同时,则两个正规式等价。如:

(a|b)*=(a*b*)*
b(ab)*=(ba)*b

从正规式得到正规文法

形如A->xy的正规式,变成:

A->xB
B->y

形如A->x|y的正规式,变成:

A->x
A->y

形如A->r*的正规式,变成:

A->rB
A->ε
B->rB
B->ε

从正规文法得到正规式

基本还是做上面的逆变换,还会用到一些正规式的代数规律变换,注意文法A->xA|y可以直接变成正规式A=x*y

确定的有穷自动机(DFA)

有穷自动机(FA)可以作为一种识别正规集的装置。确定的有穷自动机可以表示成一个五元组:
M = ( K , Σ , f , S , Z ) 即 ( 状 态 集 , 字 母 表 , 映 射 , 唯 一 开 始 状 态 , 终 止 集 合 ) M=(K,\Sigma,f,S,Z)即(状态集,字母表,映射,唯一开始状态,终止集合) M=(K,Σ,f,S,Z)(,,,,)
其中状态集就是DFA所走到的各个状态结点名,字母表则是所有出现在状态转移弧上的字母。前者对应了那些非终结符,后者对应着终结符或者ε(无条件的转移)。

DFA中开始状态S只有一个;终止状态(可接受状态)则可能不唯一,都在集合Z中;状态转换函数f是一个单值函数,即在一个状态上给出一个输入符号只能到达唯一的下一状态。
这里写图片描述

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

不确定的有穷自动机可以表示成一个五元组:
M = ( K , Σ , f , S , Z ) 即 ( 状 态 集 , 字 母 表 , 映 射 , 开 始 状 态 集 , 终 止 集 合 ) M=(K,\Sigma,f,S,Z)即(状态集,字母表,映射,开始状态集,终止集合) M=(K,Σ,f,S,Z)(,,,,)
相比DFA,这里的映射f不再是一个单值函数,即在一个状态上给出一个输入符号可以达到多种下一状态,即"下一状态"也是一个集合,即这个映射将映射到状态集K的全体子集构成的集合,而不再是状态集本身。因此只要把上面那张图加一条状态转移线,它就不再是DFA而是NFA了:
这里写图片描述

另外,NFA的开始状态也可以有多个,所以五元组中的S现在表示了一个非空的开始状态集。

有穷自动机识别正规集

DFA是一种特殊的NFA,这里就用NFA来指代FA。要识别一个字符串是否是给定的正规集内的,也就是去识别这个字符串能否由给定的正规式产生,即按照串的顺序在NFA上走,能够从某一开始状态走到某一终止状态即表示能被该NFA识别,即该串是属于这个正规集的。

特别地,对于空串ε,只要NFA中存在即作开始状态又作终止状态的状态,或存在某一开始状态到终止状态的无条件转移(ε转移),那么空串也可以被这个NFA接受。


http://www.niftyadmin.cn/n/1663737.html

相关文章

CCPD - rpnet 代码复盘

文章目录CCPD - rpnet 网络复盘一、环境准备1、环境版本依赖2、环境搭建2.1、Cuda 部分:2.2、python:CCPD - rpnet 网络复盘 rpnet的代码库:https://github.com/detectRecog/CCPD 一、环境准备 1、环境版本依赖 python: pytorch(0.3.1),…

【Struts2学习笔记】1:认识Struts2和使用方法

从apache上下载Struts2包并解压后,可以看到lib下有很多jar包,按照书上的要求,需要这些: 其中选中的那个是额外下载的,在Struts2的lib里没有。把这些jar包全部放在WEB-INF/lib/下,出现这样的符号就已经导…

数据结构_查找—散列表

数据结构——查找(散列表)基础概念散列函数的构造方法常用构造方法散列函数的冲突解决方法散列表的查找算法分析基础概念 前面所述的查找过程都是以关键字为基础,对线性表和树表的存储结构进行大类的关键字查找比较。记录中的存储结构的位置…

【编译原理学习笔记】4:从NFA构造等价DFA,对DFA的化简

对NFA的考量是困难的,对DFA的考量则是无比清晰的。对于一个NFA,总存在一个与其等价的DFA。这里"等价"指的是这两个有穷自动机的正规集是相同的。 ε-closure(…)和more(…,…) 在NFA中,ε-closure(A)指的是从状态A经若干ε弧能达…

数据结构——排序(十种常用内排序算法)

排序基础概念和排序方法概述插入排序直接插入排序代码算法分析折半插入排序代码算法分析希尔排序代码算法分析交换排序冒泡排序代码算法分析快速排序代码算法分析选择排序简单选择排序代码算法分析树形选择排序代码算法分析堆排序代码算法分析归并排序2-路归并算法代码算法分析…

pvcreate提示:Device /dev/sdc3 not found (or ignored by filtering)

使用partprobe命令重新读取分区表 [rootjetsen /]# pvcreate /dev/sdc3 Device /dev/sdc3 not found (or ignored by filtering). [rootjetsen /]# dd if/dev/urandom of/dev/sdc3 bs512 count64 640 records in 640 records out 32768 bytes (33 kB) copied, 0.0228513 seco…

【JSP学习笔记】4:使用Model1模式构建购物网站demo

J2EE课的上机题,实现一个Model1模式的购物网站的功能。 编码问题 编码问题终于找到解决方法了,首先保证每个页面能编码的都编成UTF-8,然后所有用到内置对象的地方上来先.setCharacterEncoding("UTF-8");,然后重要的是…

windows没激活的状态写BAT脚本

taskkill /f /im wlms.exe ping -n 4 127.0.0.1 shutdown -a 本文转自 Mr_sheng 51CTO博客,原文链接:http://blog.51cto.com/sf1314/1973700