编译原理 第6讲(第四章).ppt

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

第四章 词法分析 有穷自动机 有穷自动机 关于有穷自动机我们将讨论如下题目 确定的有穷自动机DFA定义 DFA 的例子: DFA 的状态图表示 DFA 的矩阵表示 DFA 的另一种定义 ∑*上的符号串t被DFA M接受 符号串被DFA M接受证明 结论: 另一个DFA的例子 DFA的程序模拟 不确定的有穷自动机NFA定义 NFA的例子 NFA的状态图表示 NFA的矩阵表示 具有?转移的NFA 有如下定理: 类似DFA, 对NFA M=?K,?,f,S,Z?也有如下定义 ∑*上的符号串t被NFA M接受也可以这样理解 例子 结论 (0|1)*(000|111)(0|1)* * * 词法分析程序 正规式、正规文法和正规集 有穷自动机 NFA的确定化、DFA的最小化 正规式、正规文法和有穷自动机 正规式/正规文法都是描述正规语言的工具 有穷自动机是识别语言的工具 给定一个正规文法G,必然有一个对应的正规集(正规语言) L(G)。相应地,有一个正规式也能够描述这个正规语言。而且该正规式和正规文法G可以相互转化。 对于这个语言,我们也有一个有穷状态自动机来对其中的句子进行识别。也就是给定任何的符号串,可以用有穷状态自动机来判定该符号串是否是文法G的句子。 有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规式所表示的集合.应用有穷自动机这个理论,为词法分析程序的自动构造寻找有效的方法和工具。 有穷自动机分为两类:确定的有穷自动机(Deterministic Finite Automata)和不确定的有穷自动机(Nondeterministic Finite Automata) 。 确定的有穷自动机DFA 不确定的有穷自动机NFA NFA的确定化 DFA的最小化 一个确定的有穷自动机(DFA)M是一个五元组: M=(K,Σ,f,S,Z)其中 1. K是一个有穷集,它的每个元素称为一个状态; 2. Σ是一个有穷字母表,它的每个元素称为一个输入符号,所以也称Σ为输入符号表; 3. f是转换函数,是在K×Σ→K上的映射,即,如 f(ki,a)=kj,(ki∈K,kj∈K)就意味着,当前状态为ki,输入符为a时,将转换为下一个状态kj,我们把kj称作ki的一个后继状态; 4. S∈K是唯一的一个初态; 5. Z? K是一个终态集,终态也称可接受状态或结束状态。 可以有多个状态作为接受状态 DFA M= ({S,U,V,Q},{a,b},f,S,{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 b S U V Q a a a b a,b b 注意:开始和接受状态的表示 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 字符 状态 0 0 0 1 b S U V Q a b b a , b a a 例:证明t=baab被下图的DFA所接受。 f(S,baab)= f(f(S,b),aab) = f(V,aab)= f(f(V,a),ab) = f(U,ab)= f(f(U,a),b) = f(Q,b)= Q Q属于终态。 得证。 与第一个方法本质一样,只不过这个方法更适合书写。 DFA M所能接受的符号串的全体记为L(M) 结论: ?上一个符号串集V???是正规的,当且仅当存在一个?上的确定有穷自动机M,使得V=L(M) Σ = {digit,not digit} 设置为初试状态,此处的K和上面五元组里的K不是一样的含义 取第一个字符 如果不是子串尾部 依据转换函数,进入下一个状态 取下一个字符 已知DFA,写一个识别程序很简单的,主要工作是把转换函数保存起来 DFA M =(K,Σ,f,S,Z)的行为的模拟程序 K:=S; c:=getchar; while ceof do { K:=f(K,c); c:=getchar; }; if K is in Z then return (‘yes’) else return (‘no’) NFA M=?K,?,f,S,Z?,其中 K为状态的有穷非空集, ? 为有穷输入字母表, f为K? ?* 到K的子集(2 K)的一种映射, S?K是初始状态集, Z ?K为终止状态集 和DFA区别 和DFA区别,N的体现 NFA M=({S,P,Z},{0,1},f,{S,P

文档评论(0)

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

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

1亿VIP精品文档

相关文档