形式语言与编译 DFA
形式语言与自动机
期末考试复习,太难了,感觉写出来会好点
有穷自动机(有限自动机Finite Autometa)
自动机通常用 状态转移图 来表示。
从一个状态输入一个刺激得到另一个状态的过程。
软件工程里面的实时系统、复杂系统也用状态转移图来表示,因此状态转移图非常有用。
通过状态转移图,可以明确的描述某个系统
有穷自动机表示状态转移:
上图有13个状态转移函数,也就是有13个转移
状态机的应用:
TCP发送数据协议用状态转移图也可以表示:
老师讲TCP状态转移图应该有7个状态,这里只是部分,4个状态
确定的有穷自动机 与 不确定的有穷自动机
有穷自动机通常分为两类,一类是确定的有穷自动机,另一类是不确定的有穷自动机。
确定的有穷自动机(DFA)是指 一个状态接受一个输入,会指向唯一一个状态
非确定的有穷自动机(NFA)是指 一个状态接受一个输入,会转向多个状态,具体转向哪一个状态并不确定;还有一种就是输入里有多个连续输入字符,这也是NFA
DFA的数学定义:
除了状态转移图和数学定义DFA,还可以用一种叫做迁移表的工具表示DFA
至此,我们共有 状态转移图、数学定义五元组、迁移表三种表示自动机的方法。
通常我们是输入一个串到DFA,当这个串走完了并且当前状态输入我们提前规定好的接受状态,那么我们就说我们设计的自动机接受了我们输入的串 ,其他情况就说是,自动机拒绝了串!
串是否被DFA接受,就是上述判定(处理)过程 。
怎样把DFA用程序表示出来??
原则:状态机中的一个状态就是一个函数;对于迁移函数,处理完状态和输入字符两部分就跳转到新状态的起始部分。
比如上图,2状态处理完n,跳转到3状态;2状态处理完i,跳转到2状态;2状态处理完 除了i和n之外的字符,跳转到1状态。
扩展的转移函数
将 状态+字符 变为 状态+串 串的长度由原来的1,扩展成为[0,1,2,3,4……]
基础: \(\delta(q,\varepsilon) = q\)
归纳: \(\delta(q,wa) = \delta((\delta(q,w)),a)\)
由10个字符,可以得到11个字符,就是这样的作用
确实是从原来的一个字符拓展成为长度大于1的串。
我的理解:引入扩展转移函数也就是可以处理句子了,不仅仅是单个字符
可以做做五元组、迁移表、自动机之间的两两转换
自动机可以判断w串能否被接受
DFA定义语言
- 若A是个自动机,L(A)是它定义的语言
- L(A)是串的集合,这个串是从开始状态到结束状态 弧标记依次组成的串
- A识别的L(A)
\(L(A)={ \{ w|\delta`(q0,w)\subset F \}}\)
L(A)也就是一组w(句子串)的集合