【计算理论】正则语言 ( 正则表达式原子定义 | 正则表达式递归定义 | 正则表达式语言原子定义 | 正则表达式语言结构归纳 | 正则表达式语言示例 | 根据正则表达式构造自动机 )
文章目录
一、正则表达式 定义
1 . 正则表达式原子定义 :
如果
是
- 字符集
中的
个字符 ,
- 空字符串
, 或
- 空集
,
那么称
是正则表达式 ;
2 . 正则表达式递归定义 :
如果
是正则表达式 , 那么
是正则表达式 ;
是正则表达式 ;
是正则表达式 ;
上述是正则表达式的定义 , 这是一个结构归纳定义 ;
二、 正则表达式语言 原子定义
正则表达式语言表示方式 :
是正则表达式 ,
是正则表达式代表的语言 ;
1 . 单个字符代表的语言 :
是字符集中的字符 , 那么其所代表的的语言是
单元集 , 是由一个元素的字符构成的 ;
2 . 空字符串代表的语言 :
如果
是正则表达式 , 其所代表的的语言
, 是由空字符串组成的集合
;
3 . 空集代表的语言 :
空集
所代表的的语言 , 就是空集 ;
三、正则表达式语言 结构归纳定义
1 . 正则表达式并集 的 语言 :
是两个正则表达式 , 其并集的语言 , 就是其 两个语言的并集 ;
2 . 正则表达式串联 的 语言 :
是两个正则表达式 , 其串联运算结果正则表达式的语言 , 就是其 两个正则表达式语言的 串联运算结果 ;
3 . 正则表达式星运算 的 语言 :
正则表达式 星运算 结果 正则表达式 的语言 , 就是
正则表达式的语言 进行 星运算的结果 ;
四、正则表达式语言 示例
字符集 :
;
正则表达式 :
;
正则表达式转化成语言 :
上述
就是
有限个字符串组成的字符 ;
正则表达式表示的语言 , 刚好是自动机所识别的语言 ; 可以根据该语言将自动机设计出来 ;
五、空集
与 空字符
差别
空集
是正则表达式 , 类似于数中的
;
空字符
是正则表达式 , 类似于数中的
;
( 后续待补充 )
六、正则表达式 定理
1 . 定理 : 一个语言如果是正则语言 , 当且仅当 , 该语言可以通过正则表达式表示出来 ;
2 . 有以下两层含义 :
- ① 正则表达式 -> 自动机识别 :正则表达式 表达出的语言 刚好 能够被自动机识别 ;
- ② 自动机识别 -> 正则表达式 : 自动机识别某个语言 , 那么该语言可以被正则表达式表达出来 ;
3 . 定理证明 :
① 正则表达式 -> 自动机识别 证明 : 给定一个正则表达式 , 设计一个自动机 , 该自动机所 接受 ( 识别 / 认识 ) 的语言 , 刚好是该正则表达式所表达的语言 ;
下面的 " 根据 正则表达式 语言 构造 自动机 " 小节的示例 , 证明了正则表达式语言必有自动机识别 ;
② 自动机识别 -> 正则表达式 证明 : 给定一个自动机 , 找到其所识别的 正则表达式语言 ;
七、根据 正则表达式 语言 构造 自动机 ( 定理正向证明 )
1 . 需求 : 根据下面的 正则表达式 构造 非确定性有限自动机 ( NFA ) , 刚好能 识别上述正则表达式表示的语言 ;
构造能识别
语言 的 自动机 ;
八、构造原子自动机
构造原子自动机 : 先构造能接收 单个字符 的自动机 ;
① 接收
字符的自动机 : 下面的自动机是可以识别
字符串的 ;
② 接收
字符的自动机 : 下面的自动机是识别
字符串的 ;
九、使用 原子自动机 拼装 正则表达式对应的自动机
拼装上述识别单个字符的 自动机 :
1 . 摆放自动机位置 : 将
个能识别
字符串的自动机 , 与
个能识别
字符串的自动机 , 按照如下排列放置 ;
2 .
对应自动机构造 :
① 自动机连接方式 :
正则表达式语言 自动机 与
正则表达式语言 自动机 是串联在一起的 ;
② 串联两个自动机的状态 : 使用
箭头 , 串联
对应自动机的接受状态 ->
对应自动机的开始状态 ;
③ 修改 前者 的状态 : 同时将
对应自动机的接受状态 改为非接受状态 ;
下面是
正则表达式 表达的语言 对应的自动机表示 :
3 .
对应自动机构造 :
① 添加新开始状态 : 重新添加一个开始状态 ;
② 连接并运算前者 : 使用
箭头 从这个新添加的开始状态 指向
自动机开始状态 ;
③ 连接并运算后者 : 使用
箭头 从这个新添加的开始状态 指向
自动机开始状态 ;
下面是
正则表达式 表达的语言 对应的自动机表示 :
4 .
对应自动机构造 :
① 构造方法 : 就是 在
对应自动机的基础上 , 使用
箭头 , 从 接受状态 指向 开始状态 ;
② 连接个数 : 所有的接受状态 , 都 使用
箭头 指向开始状态 , 这里有两个接受状态 , 需要都指向开始状态 ;
相关文章
- 正则表达式高级用法
- C语言使用正则表达式
- js手机号正则校验_正则表达式验证手机号码格式
- Python 正则表达式大全[通俗易懂]
- 匹配中文的正则表达式_正则表达式和正规式
- 【计算理论】Pumping 引理 ( 四个等价概念 | 自动机界限 | Pumping 引理简介 | Pumping 引理证明正则表达式 | Pumping 引理示例分析 )
- 【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA ) ★★
- 在线正则表达式验证工具:Regexpal
- PHP preg_split():使用正则表达式分割字符串
- Java正则表达式过滤汉字详解编程语言
- MySQL正则表达式实现中文匹配(mysql正则匹配中文)
- 表达式Oracle中正则表达式的神奇力量(oracle中有没有正则)
- JS正则表达式详解[收藏]
- js正则表达式讲解之index属性(RegExp对象)
- 经典Javascript正则表达式[优质排版]
- javascript正则表达式基础篇