编译原理第三章PPT3.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理第三章PPT3

不确定的有穷自动机(NFA) NFA(Non-Deterministic Finite Automata)是一个五元组,它包括: 有穷状态集合S 状态集 输入符号集合? 字母表 转换函数move 转移函数 move(state, symbol) ? set of states 一个开始状态 s0?S 开始状态(初态) 一个接受状态集合F?S 终止状态集(终态) NFA的两种表示 状态转换图:包括状态(圆圈)、弧、初态、终态 状态转换表:描述各个状态下,对于各个输入的状态迁移 自动机中输入字符串的接受 一个NFA接受(accept)输入字符串x, 当且仅当状态转换图中存在一条从开始状态到某个接受状态的路径,使得该路径上各条边的符号组成符号串x。 由一个NFA定义(接受)的语言是其接受的所有符号串的集合。 自动机中输入字符串的接受(例) 确定的有穷自动机(DFA) NFA的一个特例 没有输入ε之上的转换动作 对每个状态s和每个输入符号a,有且仅有一条标号为a的边离开。 DFA的运行 INPUT: An input string x terminated by an end-of-file character eof. A DFA D with start state s0, accepting states F, and transition function move. OUTPUT: Answer yes if D accepts x; no otherwise. s = s0; c = nextchar( ); while ( c != eof ) { s = move(s, c); c = nextchar( ); } if ( s is in F ) return yes; else return no; 接受(a|b)*abb的DFA NFA状态集上的操作 ε-closure(s) : s ?S 状态s的ε闭包 从状态s出发,仅通过ε边就能达到的状态集合 ε-closure of T : T ? S 状态集T的ε闭包 从状态集T中任一状态出发,仅通过ε边就能达到的状态集 move(T,a) : T ? S, a?? 转移函数 对于状态集T,在输入a时,可以到达的状态集(不考虑ε边) NFA状态集上的操作(例) ε-closure(T)的计算 push all states of T onto stack; initialize ε-closure(T) to T; while ( stack is not empty ) { pop t, the top element, off stack; for ( each state u with an edge from t to u labeled ε ) if ( u is not in ε-closure(T) ) { add u to ε-closure(T); push u onto stack } } ε-closure(T)的计算(例) ε-closure({0}):经过0条ε弧{0} 经过1条ε弧{1,4} 经过2条ε弧{2,6,5} 经过3条ε弧{7} 经过4条ε弧? ε-closure({0})={0,1,4,2,6,5,7} move(ε-closure({0}),a)=move({0,1,4,2,6,5,7},a)={3,6} ε-closure(move(ε-closure({0}),a))= ε-closure({3,6})={3,6,7} 由NFA构造DFA的子集构造算法 initially, ε-closure(s0) is the only state in Dstates, it is unmarked while ( there is an unmarked state T in Dstates ) { mark T; for ( each input symbol a ) { U = ε-closure(move(T,a)); if ( U is not in Dstates ) add U as an unmarked state to Dstates; Dtran[T, a] = U; } } 由NFA构造DFA的子集构造算法(例) 由NFA构造DFA的子集构造算法(例2) NFA的模拟 S = ε-closure(s0); c = nextchar( ); while ( c != eof ) { S = ε-closure(move(S, c)) ; c = nextchar

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档