【编译原理复习笔记】正则表达式与自动机

news2025/1/11 7:39:07

正则表达式

正则表达式是一种用来描述正则语言的更紧凑的表达方法
e.g. r = a ( a ∣ b ) ∗ ( ϵ ∣ ( . ∣ ) ( a ∣ b ) ) r=a(a|b)^*(\epsilon|(.|\\_ )(a|b)) r=a(ab)(ϵ(.∣)(ab))
正则表达式可以由较小的正则表达式按照特定的规则递归地构建。每个正则表达式定义的语言记作 L(r)。

正则表达式的定义

空字符是一个正则表达式,则 L ( ϵ ) = ϵ L(\epsilon) = \\{\epsilon\\} L(ϵ)=ϵ
属于字母表中的字母 a为一个正则表达式,则 L ( a ) = a L(a) = \\{a\\} L(a)=a
假设 r 和 s 都是正则表达式,表示的语言分别是 L(r)和 L(s)
则:
(1)r|s 是一个正则表达式:L(r|s)=L(r)并 L(s)
(2)rs 是一个正则表达式,L(rs) = L(r)L(s)
(3)r是正则表达式,其语言等于 r 语言的闭包
(4)(r)的语言就是 r 的语言
这四个运算的优先级从高到低分别是:
,连接,|
e.g.
∑ = a , b \sum = \\{a,b\\} =a,b
L(a|b) ={a,b}
L((a|b)(a|b))={aa,ab,ba,bb}
L(a*) = (L(a))** = {a}* = {epsilon,a,aa,…}
十进制整数:(1|…|9)(0|…|9)|0
八进制整数:0(1|…|7)(0|…|7)

正则语言

可以用正则表达式定义的语言叫做正则语言

正则表达式的代数定律

(1)|具有交换律结合律
(2)连接具有结合律
(3)连接对|具有分配律
(4)epsilon 可以作为连接的单位元: ϵ s = s ϵ = s \epsilon s = s \epsilon = s ϵs==s
(5)闭包中一定包含 epsilon
(6)克林闭包具有幂等性

正则定义

正则定义是具有如下形式的定义red:序列
d i → r i d_i \to r_i diri
其中 di 均不相同,且都不在字母表中
每一个 ri 均为字母表中的符号,或者为已经定义过的正则表达式
e.g.
d i g i t → 0 ∣ 1 ∣ . . . ∣ 9 digit \to0|1|...|9 digit0∣1∣...∣9
KaTeX parse error: Expected group after '_' at position 30: …..|Z|a|...|z|\\_̲
i d e n t i f i e r → l e t t e r ( l e t t e r ∣ d i g i t ) ∗ identifier \to letter(letter|digit)^* identifierletter(letterdigit)
这三条式子合在一起就完成了对 identifier 的定义

自动机

有穷自动机

Finite Automata,是对一类处理系统建立的数学模型
这类系统具有一系列离散的输入输出信息和有穷的内部状态
系统只需要根据当前的状态和当前面临的输入信息就可以决定系统的后继行为,每当系统处理了当前的输入,内部状态就会发生改变
e.g.电梯控制装置
不需要知道先前全部的状态,只需要知道当前状态与还未满足的状态
e.g. 图灵机
在这里插入图片描述

输入带用来存放符号串
读头用来从左至右逐个读取输入符号,不能够修改或者往返移动
有穷控制器:具有有穷个状态数,根据当前状态和当前输入符号转入下一个状态

转换图

结点:有穷自动机的状态
初始状态:只能有一个,用start 表示
终止状态:可以有多个,用双圈表示
带标记的有向边:如果对于输入 a,存在一个从状态 p 到 q 的转换,就在 p,q 之间
在这里插入图片描述

FA 接收的语言

给定输入串 x,如果存在一个对应于 x 的从初始状态到终止状态的序列,就可以被接受
由一个有穷自动机 M 接受的所有串构成的集合称为是该 FA 接收的语言,记为 L(M)
上图中自动机接受的语言即为所有以 abb 结尾的{a,b}上的串的集合

最长子串匹配原则

当输入串的多个前缀与一个或多个模式匹配时,总是选择最长的前缀进行匹配
因此尽管到达某个终态,只要还存在有向边带符号指向其他节点,FA 就继续前进,寻找尽可能长的匹配
e.g. x=-1
s t a r t → 0 → < 1 → = 2 start\to 0 \to^<1\to^=2 start0<1=2
-1<1,-1<=2
故根据最长子串匹配原则,应该到 2 为结束状态

有穷自动机的分类

确定的有穷自动机 DFA

M = ( S , ∑ , δ , s 0 , F ) M = (S,\sum,\delta,s_0,F) M=(S,,δ,s0,F)
S 表示有穷状态集
SUM 表示输入字母表,这里假设空字符不属于输入字母表
delta 为 S * SUM 到 S 的映射,表示从状态 s 出发,沿着有向边 a 能够到达的状态
s0 开始状态
F 终止状态的red:集合

非确定有穷自动机NFA

与有穷状态机的区别
沿着有向边 a 可能到达多个状态,故 delta 表示 S*SUM 映射到 2^S 的集合

DFA 和 NFA 具有等价性

对于任何 NFA,有 DFA 可以识别同一语言
对于任何 DFA,有 NFA 可以识别同一语言
在这里插入图片描述

带有空边的 NFA

带空边的有向线段从一个状态指向另一个状态代表了不需要条件就可离开当前状态,类似串联一系列 if,当满足某个 if的时候就会停留在该状态并处理对应的程序,随后继续向下检验其他 if
带有空边的 NFA 和不带空边的 NFA 也可以等价:
在这里插入图片描述

DFA 的算法实现

s = s 0 s = s_0 s=s0
c = n e x t C h a r ( ) ; c = nextChar(); c=nextChar();
KaTeX parse error: Expected '}', got 'EOF' at end of input: …ile (e!=eof)\\{
$ s=move(s,c);$
c = n e x t C h a r ( ) ; c = nextChar(); c=nextChar();
i f s ∈ F r e t u r n y e s if s \in F \\ return \\ yes ifsFreturnyes
e l s e f a l s e else \\ false elsefalse

从正则表达式到DFA

往往需要 NFA 作为中介
对于空字 epsilon/字母表中符号 a
s t a r t → q 0 → ϵ q f start \to q_0 \to^\epsilon q_f startq0ϵqf
s t a r t → q 0 → a q f start \to q_0 \to^a q_f startq0aqf
其余运算对应的 NFA:
在这里插入图片描述

从 NFA 到 DFA

子集构造法:首先将 NFA 图改写成转换表
然后具体去写
在这里插入图片描述

识别标识符的 DFA

d i g i t → 0 ∣ 1 ∣ . . . ∣ 9 digit \to0|1|...|9 digit0∣1∣...∣9
KaTeX parse error: Expected group after '_' at position 30: …..|Z|a|...|z|\\_̲
i d e n t i f i e r → l e t t e r ( l e t t e r ∣ d i g i t ) ∗ identifier \to letter(letter|digit)^* identifierletter(letterdigit)
根据识别标识符的正则定义,我们可以首先获得其 NFA
在这里插入图片描述
此时的 NFA 与 DFA 相等,所以不用再进行转换

识别注释的 DFA

在确定一个状态机的时候首先要确保正则定义是正确的,否则无法写出正确的状态机
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【笔记】软件架构师要点记录(1)

【笔记】软件架构师要点记录 20240517 20240517 连续性&#xff1a;恢复能力&#xff1b;可用性&#xff1a;保持稳定态的时长 增量开发模式&#xff1a;在增量开发中&#xff0c;每个增量都有明确的范围和功能&#xff0c;并按照特定的功能顺序完成。增量之间的范围划分在开发…

防火墙技术基础篇:基于IP地址的转发策略

防火墙技术基础篇&#xff1a;基于IP地址的转发策略的应用场景及实现 什么是基于IP地址的转发策略&#xff1f; 基于IP地址的转发策略是一种网络管理方法&#xff0c;它允许根据目标IP地址来选择数据包的转发路径。这种策略比传统的基于目的地地址的路由更灵活&#xff0c;因…

图片转excel技术在医疗领域的应用探讨

在医疗行业中&#xff0c;图片转Excel技术的应用已经逐渐普及&#xff0c;为医护人员提供了极大的便利。这种技术利用OCR&#xff08;光学字符识别&#xff09;和机器学习的先进算法&#xff0c;将图片中的信息自动转化为Excel表格&#xff0c;大大提高了数据处理和分析的效率。…

智能锁千千万,谁是你的NO.1,亲身实测凯迪仕传奇大师K70旗舰新品

智能锁千千万&#xff0c;谁是你的NO.1。欢迎来到智哪儿评测室&#xff0c;这次我们为大家带来了凯迪仕传奇大师K70系列的一款重磅新品。 在科技的浪潮中&#xff0c;家居安全领域正经历着前所未有的变革。智能锁越来越成为家的安全守护神&#xff0c;以及智能生活的得力助手。…

Monodle centerNet3D 瑞芯微RKNN、地平线Horizon芯片部署、TensorRT部署

一直想做一点3D目标检测&#xff0c;先来一篇单目3D目标检测Monodle&#xff08;基于centernet的&#xff09;&#xff0c;训练代码参考官方【代码】&#xff0c;这里只讲讲如何部署。 模型和完整仿真测试代码&#xff0c;放在github上参考链接【模型和完整代码】。 1 模型训练…

Creating Server TCP listening socket *:6379: listen: Unknown error

错误&#xff1a; 解决方法&#xff1a; 在redis安装路径中打开cmd命令行窗口&#xff0c;输入 E:\Redis-x64-3.2.100>redis-server ./redis.windows.conf结果&#xff1a;

智慧校园学工管理系统的部署

学工体系思政服务该怎么规划建造&#xff1f;思政作为高校育人的中心使命&#xff0c;在做到让学生健康高兴生长的一起&#xff0c;也应满意学生生长成才的各类需求。使用技术为学生供给优质的信息化服务&#xff0c;是其间的有效途径。大数据让个性化教育成为可能&#xff0c;…

Python函数、类和方法

大家好&#xff0c;当涉及到编写可维护、可扩展且易于测试的代码时&#xff0c;Python提供了一些强大的工具和概念&#xff0c;其中包括函数、类和方法。这些是Python编程中的核心要素&#xff0c;可以帮助我们构建高效的测试框架和可靠的测试用例。 本文将探讨Python中的函数、…

Swin Transformer 笔记与理解

目录 解决什么问题基本结构理解 解决什么问题 传统的transformer处理于长序列需要非常大的计算量&#xff0c;而且很慢。且传统的transformer虽然的全局信息的获取上有着很好的效果&#xff0c;但是在局部信息的获取上就没有那么强了。Swim transformer的主要的贡献就是使用分…

LLM 大模型学习必知必会系列(十):基于AgentFabric实现交互式智能体应用,Agent实战

LLM 大模型学习必知必会系列(十)&#xff1a;基于AgentFabric实现交互式智能体应用,Agent实战 0.前言 **Modelscope **是一个交互式智能体应用基于ModelScope-Agent&#xff0c;用于方便地创建针对各种现实应用量身定制智能体&#xff0c;目前已经在生产级别落地。AgentFabri…

Java输入与输出详解

Java输入和输出 前言一、Java打印Hello World二、输出到控制台基本语法代码示例格式化字符串 三、从键盘输入读入一个字符正确写法 使用 Scanner 读取字符串/整数/浮点数使用 Scanner 循环读取 N 个数字 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这…

嵌入式智能硬件茶杯垫的设计与实现方案

iCupBox简介 这是一款智能杯垫产品,基于GTD时间管理理念设计,目的是提醒人们专心工作和及时喝水休息,提高工作效率。 https://gitee.com/jiangtao008/iCupBox 开原许可协议:MIT 项目分为客户端APP和杯垫固件系统: 客户端APP,使用QML开发,集成GTD时间管理方法,与杯垫固…

QQ技术导航源码附带交易系统

网站功能 QQ登录 友联自助交换 友情链接交易功能 多功能搜索 ico小图标本地化 网站图片本地化 蜘蛛日志 文章评论 网站评论 自助链接匿名提交站点&#xff0c;添加友链访问网站自动审核通过 VIP 会员等级 VIP 付费升级 单个文章或者站点付费快审 多背景图片可自定义背景图片…

Web Server项目实战2-Linux上的五种IO模型

上一节内容的补充&#xff1a;I/O多路复用是同步的&#xff0c;只有调用某些API才是异步的 Unix/Linux上的五种IO模型 a.阻塞 blocking 调用者调用了某个函数&#xff0c;等待这个函数返回&#xff0c;期间什么也不做&#xff0c;不停地去检查这个函数有没有返回&#xff0c…

【算法】二分算法——寻找峰值

题解&#xff1a;寻找峰值(二分算法) 目录 1.题目2.暴力求解3.二分算法4.总结 1.题目 题目链接&#xff1a;LINK 2.暴力求解 暴力求解的思路很简单&#xff0c;这个数组的形状无非就三种&#xff1a; 一直上升下降(这里包含先下降后上升)先升后降 总结一下规律&#xff1…

详解CSS(二)

目录 1.背景属性 1.1背景颜色 1.2背景图片 1.3背景平铺 1.4背景位置 1.5背景尺寸 2.圆角矩形 3.元素的显示模式 3.1行内元素/内联元素&#xff08;Inline element&#xff09; 3.2块级元素&#xff08;Block-level element&#xff09; 3.3行内块元素&#xff08;In…

一键自动回复,提升客服效率,解锁销售新高度

在快速迭代的跨境电商时代&#xff0c;效率与顾客体验是决定商家能否脱颖而出的关键要素。作为一款专为跨境电商设计的全能管理工具&#xff0c;现我们已全面升级&#xff0c;与俄罗斯头部电商平台Ozon深度整合&#xff0c;推出自动回复功能&#xff0c;旨在帮助卖家实现客服管…

1.Nacos 入门与实战(Spring Cloud)

1.Nacos 入门与实战 1.什么是 Nacos?1.1 Nacos 功能1.1.1 配置中心1.1.2 注册中心 1.2 Nacos 优点 2.Nacos 基本使用2.1 Nacos 部署安装2.1.1 部署方式2.1.2 安装并启动2.2.3 配置数据源2.2.4 开启控制台授权登录&#xff08;可选&#xff09; 2.2 配置中心使用2.2.1 创建配置…

使用API有效率地管理Dynadot域名,进行域名邮箱的默认邮件转发设置

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

Docker-Android安卓模拟器本地部署并实现远程开发测试

文章目录 1. 虚拟化环境检查2. Android 模拟器部署3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问小结 6. 固定Cpolar公网地址7. 固定地址访问 本文主要介绍如何在Ubuntu系统使用Docker部署docker-android安卓模拟器&#xff0c;并结合cpolar内网穿透工具实现公网远程访问本地…