- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
有限自动机ppt整理
有限自动机(Finite Automata) 描述程序设计语言中的单词的识别过程。 主要内容: 确定有限自动机DFA(Deterninistic FA) 确定有限自动机DFA的实现 非确定有限自动机NFA(Nondeterninistic FA) NFA到DFA的转换 DFA的化简 确定有限自动机DFA 确定有限自动机DFA为一个五元组 (?,SS,S0,f,TS),其中: ?是一个有穷字母表,它的每个元素称为一个输入字符; SS是一个有穷集,它的每个元素称为一个状态; S0? SS是唯一的一个初始状态; f是在 SS ? ?? SS上的转换函数 TS?SS,是一个终止状态集,又称为接受状态集 DFA的两种表示方式 状态转换图: 结点表示状态,转换边表示转换函数,边 的箭头方向指向转换函数中定义的转换方 向。标识出初始状态和终止状态。 状态转换表: 可用二维数组描述。标识出初始状态和终 止状态。 Trans( SI ,a)= SJ 一个DFA的例子 DFA M=( {a,b}, {S,U,V,Q}, S, f, {Q} ), 其中 f 定义为: f ( S, a )=U f ( V, a )=U f ( S, b )=V f ( V, b )=Q f ( U, a )=Q f ( Q, a )=Q f ( U, b )=V f ( Q, b )=Q DFA接受的字符串 对于?*中的任何字符串t,若存在一条从初始结点到某一终止结点的路径,且这条路上所有弧的标记符连接成的字符串等于t,则称t可为DFA M所接受(识别)。 DFA M 所能接受的字符串的全体记为L(M). DFA的确定性 初始状态唯一。 转换函数f:SS???SS是一个单值函数,也就是说,对任何状态S?SS,和输入符号a ? ?, f(S,a)唯一地确定了下一个状态。即转换函数至多确定一个状态。 没有空边。即没有输入为?(?) DFA的实现1 状态转换表的形式:(数组T存放转换函数) 1.当前状态State置为初始状态 2.读一个字符 ? CurrentChar 3.如果CurrentChar?Eof并且 T(State,CurrentChar)?error 则当前状态转为新的状态T(State,Current), 读下一字符。重复第3步工作。 4.如果当前字符为Eof并且当前状态属于终止状态,则接受当前字符串,程序结束。否则报错 特点: 程序短小,但占用存储空间多 DFA的实现2 状态转换图的形式: 每个状态对应一个带标号的case语句 转向边对应goto语句 特点: 程序长,但占用存储空间少 非确定有限自动机NFA 定义1:一个非确定有限自动机(NFA)A是一个五元组A=(?,SS,S0,f,TS).其中 ?是字母表 SS是状态集 S0是初始状态集 f是转换函数,但不要求是单值的 f: SS ? (?∪{?}) ? 2SS TS是终止状态集 非确定有限自动机NFA 定义2:设A是一个NFA,A= (?,SS,S0,f,TS) 则定义L(A)为从任意初始状态到任意终止状态所接受的字符串。 L(A)={?|s0??s’, s0? S0 s’?TS} 定义3:设A1和A2是同一个字母表上的自动机,如果有L(A1)=L(A2),则称A1和A2等价。 NFA到DFA的转换 定理 对于每一个非确定自动机A,存在一个确定自动机A’,使得L(A)=L(A’). 转换: 符号合并 同一状态的不同输出边标有相同的字符。 ?合并 含有?边 NFA到DFA的转换 符号合并:A:NFA, A’:DFA 1.令A’的初始状态为S0’=[S1,S2,…Sk], 其中S1…Sk是A的全部初始状态。 2.若S’=[S1,…,Sm]是A’的一个状态, a??则定义 f’(S’,a)=f(S1,a)?f(S2,a)…?f(Sm,a) 3.若S’=[S1,…,Sn]是A’的一个状态,且存 在一个Si是A的终止状态,则令S’为A’ 的终止状态。 NFA到DFA的转换 ?合并 (Close(S)) 1.对S状态寻找?边,如果有令Ss={S} 2.对任意状态Si?Ss,如果有:f(Si,?)=
文档评论(0)