形式语言与自动机
前言
所需知识
集合的基本概念
命题的基本概念
主要内容
语言和文法
DFA和NFA自动机
正则集、正则式、右线性语言的等价
语言及文法
语言的定义
字符的有限集合称为字母表,记为T
例如
T={1,2,3,4,5,6,7,8,9,0}就是一个字母表
而由字母表中的字符构成的有限序列则称为字母表T上的字符串
例如
110053 102 均为字母表T上的字符串
而长度为0的串则称为空串,用ε表示,代表着这个串中不含任何一个字母
ω1ω2称为两个串的连接(这里ω1和ω2均为字符串)
例如
ω1=112,ω2=231
则ω1ω2=112231
显然任何串和空串连接还是它本身
T*则是字母表T上所有字符串和空串的集合
T+则是字母表T上所有字符串的集合(不含空串)
而语言的定义就是,T*的子集就是字母表T上的语言
也可以这么理解,就是说,在使用字母表T上的字母形成的全部字符串中(包含空串),取任意多个构成的一个集合就可以说是字母表T上的语言。由此可得字母表T上的语言有无穷多个。
语言作为一个集合,满足集合的交并补的关系
在这里还需要说明一个新的运算就是语言的积运算
语言L1和L2(无特殊说明情况下,L均表示语言(language)),它们的积记做L1·L2
两个字母表中单个元素(字符串)的运算使用连接来计算
例如
L1={0,1};L2={2,3};
则L1·L2所得的结果为{**02,12,03,13**}
注意
积运算显然不满足交换律,**·** 前后的语言调换一下位置将得到不同的结果
到此,我们已经理解了语言的定义,而文法,则是来产生语言的一种方法。
文法的定义
文法用G来表示,是一个四元组
G=(N,T,P,S)
- 四元组
- N:非终结符,即为T的子集,例如{a,b},有限集合
- T: 终结符,一般用大写字母表示,文法生成的语言不能包含非终结符,只能包含终结符
- P: 生成式,文法的核心,解释了这个文法生成语言的规则,用α->β的格式来表示生成式
- S: 起始符,语言开始的位置,必须为非终结符
例如
对于文法G=({A,S},{a},P,S)
P为:S->a, S->aA, A->aa;
而由此文法产生的语言就是:{a,aaa}
文法的分类
根据对生成式的限制不同,将文法分为四类
- 分别为
- 0型文法(无限制)
- 1型文法/上下文有关文法(生成式的左边要小于右边,且左边至少含有一个非终结符)
- 2型文法/上下文无关文法(生成式的左边为单个非终结符)
- 3型文法/正则文法(生成式的左侧为单个非终结符,右侧为字符串连接单个非终结符,或者单个字符串,如果非终结符在右则称为右线性文法,在左则称为左线性文法)
有限自动机和右线性文法
有限自动机的概念
自动机所定义的语言属于正则语言,通过给定的输入,在不同状态之间转换之后能得到输出,能够成功到达终止状态(自动机的结束状态)的输入则属于该自动机定义的语言。
而有限状态自动机,顾名思义,状态数是有限的
而如果是每次状态转换的后继状态唯一,则称为确定的有限自动机(DFA)
而如果转换的后继状态可能有多个,则称为不确定的有限自动机(NFA)
该如何理解呢,对于DFA来说,给定输入则每次执行都会结束于一个状态。
而对于NFA来说,给定输入则有可能结束于多个状态。
例如
来简单解释一下这个有限自动机
- 箭头及箭头上的字母表示该状态在接受了那个字符之后将转移到那一个状态
- 例如q0在接受了a之后将转移到状态q1,而此时若再接受一个b则继续保持在q1,若接受了a则进入终止状态q3。表示aa是可以被这个自动机识别的(aba也可以)
- 无起点的箭头指向的状态(q0)表示这是这个自动机的开始状态
- 两个圆圈包含起来的状态(q3)表示这是这个自动机的终止状态
自动机的形式定义并不复杂,但并非本篇文章的重点,在此略去(4-25日编辑)