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

正则表达式

正则表达式是一种用来描述正则语言的更紧凑的表达方法
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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【软件设计师】程序语言

1.程序设计语言基本概念 1.1 低级语言与高级语言 低级语言&#xff1a;机器语言和汇编语言称为低级语言 机器语言指0.&#xff0c;1组成的机器指令序列 汇编语言指用符号表示指令的语言&#xff0c;如MOV AX&#xff0c;2 高级语言&#xff1a;从人类的逻辑角度出发&#xff0…

蓝卓入选工信部2023年度“揭榜挂帅”项目

蓝卓“面向多元异构和应用快速开发演化的智能工厂操作系统解决方案”&#xff0c;凭借行业领先的平台技术能力以及数智赋能的硬核实力成功揭榜挂帅。 本次入选不仅代表了蓝卓又一次获得工信部权威专家及国家认可&#xff0c;更是“工厂操作系统”首次在国家层面获得表彰。 智能…

听说京东618裁员?所以日常准备很重要呀

文末有最少必要的面试题&#xff0c;还准备了离线 PDF 版本。 京东也要向市场输送人才了? 这几天看到技术群里不少朋友在讨论京东裁员相关的信息。 我去看了下京东近期的操作&#xff0c;京东内部考勤调整和午休时间缩短&#xff0c;以及强化打卡机制等管理调整&#xff1b;有…

IDEA设置运行内存

1.开启内存指示条​​​​​​​ 查看idea右下角​​​​​​​ 2.环境变量查看ideaVM地址&#xff0c;没有的话那就是默认的配置文件&#xff1a; idea 安装 bin 目录下 idea64.exe.vmoptions 3.去对应路径修改内存参数大小 4.重启IDEA&#xff0c;end

开启Three之旅(二)射线、拾取模型、解决鼠标点击、Hover以及CSS3Renderer点击穿透问题

文章目录 射线RayRaycaster屏幕坐标 --> 设备坐标射线坐标计算&#xff08;Canvas尺寸变化&#xff09;射线拾取层级模型拾取Sprite控制场景场景一&#xff1a;用鼠标模拟hover事件场景二&#xff1a; 选中模型&#xff08;click事件&#xff09;场景三&#xff1a;处理射线…

德勤:中国、印度等对ChatGPT等生成式AI应用,处领先地位

全球四大会计事务所之一的德勤&#xff08;Deloitte&#xff09;在官网发布了一份&#xff0c;名为《Generative AI in Asia Pacific: Young employees lead as employers play catch-up》的深度调查报告。 主要查看中国、澳大利亚、印度、日本、新加坡、韩国、中国台湾等亚太…

2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟

注意开浮点数 ​​​​ import java.util.Scanner;public class Main {static Scanner scnew Scanner(System.in);public static void main(String[] args) {double t0;int cnt0;double distance1000;while(distance>1){//相撞时间tdistance/60.0;distance-t*20;cnt;}Syste…

【深度学习】xformers与pytorch的版本对应关系

https://github.com/facebookresearch/xformers/tree/v0.0.23 找tag&#xff1a; tag下面写了对应关系&#xff1a; 安装指令就是&#xff1a; pip install xformers0.0.23 --no-deps -i https://download.pytorch.org/whl/cu118

minaActivatorA12+物主锁完美解信号,可登iCloud,有消息通知,支持iOS17.5.1+

原创 IOS福利部落 IOS福利部落 2024-05-26 19:35 福建 Mina Activator A12是一款绕过物主锁界面的解锁工具&#xff0c;可以激活所有iPhone恢复信号&#xff0c;并且支持插卡接打电话、收发短信、4G流量上网&#xff0c;支持iCloud登录&#xff0c;有消息通知&#xff0c;支持i…

如何保证员工在精益变革中始终保持积极的态度?

在当今日新月异的商业环境中&#xff0c;企业为了保持竞争力&#xff0c;需要不断寻求创新和变革。精益变革作为一种提升效率和质量的有效手段&#xff0c;已逐渐成为企业转型升级的关键。然而&#xff0c;变革往往伴随着挑战和不确定性&#xff0c;如何保证员工在精益变革中始…

高职高校实训教学实验室管理系统一体化

盛元广通高职高校实训教学实验室管理系统一体化是确保实验教学有序进行的关键环节。通过更加科学 、有效、合理的管理&#xff0c;明确排课原则、收集课程信息、评估实验室资源、制定排课计划、冲突检测与调整、发布排课信息、调课管理以及数据统计与分析等措施。实现了实验室资…

第14章-蓝牙遥控小车 手把手做蓝牙APP遥控小车 蓝牙串口通讯讲解

本文讲解手机蓝牙如何遥控小车&#xff0c;如何编写串口通信指令 第14章-手机遥控功能 我们要实现蓝牙遥控功能&#xff0c;蓝牙遥控功能要使用:1.单片机的串口、2.蓝牙通信模块 所以我们先调试好:单片机的串口->蓝牙模块->接到一起联调 14.1-电脑控制小车 完成功能…

目标检测——无人机图像数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

【Linux安全】Firewalld防火墙基础

目录 一、Firewalld概述 二、Firewalld和iptables的关系 三、Firewalld网络区域 1、firewalld防火墙预定义了9个区域: 2、firewalld 数据包处理原则 3、firewalld数据处理流程 4、firewalld检查数据包的源地址的规则 四、Firewalld防火墙的配置方法 1、firewalld 命令…

气膜建筑:室内滑雪场的理想选择—轻空间

近年来&#xff0c;室内滑雪场成为越来越多投资者关注的热门项目。随着滑雪运动的普及&#xff0c;滑雪场的生意也愈加红火。对于投资者来说&#xff0c;选择一种省钱又实惠的搭建方案至关重要&#xff0c;而气膜建筑无疑是一个理想的选择。以下将详细介绍气膜建筑在室内滑雪场…

若依微服务实现分布式事务

一、基本介绍 1、什么是分布式事务 指一次大的操作由不同的小操作组成的&#xff0c;这些小的操作分布在不同的服务器上&#xff0c;分布式事务需要保证这些小操作要么全部成功&#xff0c;要么全部失败。从本质上来说&#xff0c;分布式事务就是为了保证不同数据库的数据一致…

RabbitMQ 交换机类型

常用交换机 发布订阅&#xff08;Publish/Subscribe&#xff09;交换机 一个生产者给多个队列发送消息&#xff0c;X 代表交换机。 交换机的作用&#xff1a;类似网络路由器&#xff0c;主要提供转发功能&#xff0c;解决怎么把消息转发到不同的队列中&#xff0c;让消费者从不…

国家数据局发布《数字中国发展报告 (2023年)》

2023年数字中国建设总体呈现发展基础更加夯实、赋能效应更加凸显、数字安全和治理体系更加完善、数字领域国际合作更加深入等四方面特点。 为贯彻落实党中央、国务院关于建设数字中国的重要部署&#xff0c;国家数据局会同有关单位系统总结2023年数字中国建设重要进展和工作成效…

【UE5.1 角色练习】08-传送技能

前言 在上一篇&#xff08;【UE5.1 角色练习】07-AOE技能&#xff09;基础上继续实现人物通过鼠标点击然后传送技能的功能。 效果 步骤 1. 首先需要显示鼠标光标&#xff0c;我们可以在玩家控制器中勾选“显示鼠标光标” 2. 在项目设置中添加一个操作映射&#xff0c;设置按…

2-Django项目进阶--继续学生管理系统

目录 项目框架: urls.py views.py modules.py class_data.html add_and_modify.html add_stu.html 笔记: 继承语法 模板继承总结&#xff1a; 班级添加 add_and_modify.html 修改添加公用一个页面即可 views.py 班级修改 views.py url.py 班级删除 views.py…