正则语言 (Regular Language)
简介
正则语言 (regular language) 是可以用正则表达式
或自动机
描述的语言,用于解析和设计编程语言。正则语言
和有限自动机
可以对需要极少量内存的计算问题进行建模。如果有一个有限自动机
可以识别
一种语言,那么它就是一种正则语言
。
正则语言是形式语言 (Formal Language) 的其中一种,如果存在有限的符号集合 (
如果有个集合为空,那么该空集也可以被称为一种语言。可以表示为:空字符串
(
形式定义
正则表达式的形式定义如下:
- 空集合
是正则语言; - 只包含一个空串的语言
是正则语言; - 对所有
, 是正则语言; - 若
, 是正则语言,则 (concatenation), (union), (kleene star) 都是正则语言。
除此之外都不是正则语言。
正则语言运算
正则语言有三种运算:连接
(Concatenation)、并
(Union)、Kleene 星
(Kleene Star)。
Kleene 在 20 世纪 50 年代提出的这三种基本运算符。
连接
通过连接可以把两种或两种以上的语言组合到一起。
若有集合 连接
运算后就结果为
并
若有集合 并
运算后结果为
Kleene 星
Kleene 星运算是一元运算,用 重复
集合元素任意多次
的运算,形式表示:
若有集合 Kleene 星
运算后结果为
用正则表达式描述正则语言
开头简介说过正则表达式可以用来描述正则语言。正则表达式可以描述所有通过对某个字母表上的符号应用上面三种运算符而得到的语言。
例子:一个有限集合 0(0|1)*1
,如果用字母符号和正则语言运算符表示它是这样的:
所以以下字符串对于该语言来说语法都是正确的:
- 01
- 0011
- 00101
- 000001
- 0000001
- …
用有限状态自动机 (FSM) 描述正则语言
如果有一个有限语言
FSM 的正则运算
如果有两个语言:L₁
用 FSM₁
表示,L₂
用 FSM₂
,那么对应自动机的三个运算转换如下图所示:
参考资料:
> https://www.bearnok.com/grva/it/knowledge/software/mathjax