编译原理第四章解析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
R= (a|b)* 构造为NFA N 解:从左到右分解R,令r1=a,则有 3 2 a 令r2=b,则有 5 4 b 令r3=a|b,则有 3 a 5 b 1 6 ? ? ? ? 2 4 令r3=(a|b)*,则有 3 a 5 b 1 6 ? ? ? ? 2 4 0 7 ? ? R= (a|b)*ab 构造为NFA N x y (a|b)* ab i y x i a|b a i b ? x i a b y i b a ? 将R=(a|ab)* b b*构造为NFA N 正规文法与有穷自动机之间转换 G[S]: S→aA S→bB S→? A→aB A→bA B→aS B→bA B→? S A Z B a b a b a b ? ? 正规文法与有穷自动机之间转换 G[S]: A→aB A→bD B→bC C→aA C→bD C→? D→aB D→bD D→? A C D B a b a b a b b 正规式用于说明(描述)单词的结构十分简洁方便。而把一个正规式编译(或称转换)为一个NFA进而转换为相应的DFA,这个NFA或DFA正是识别该正规式所表示的语言的句子的识别器。基于这种方法来构造词法分析程序,LEX是一个广泛使用的工具。 词法分析程序的设计技术可应用于其它领域,比如查询语言以及信息检索系统等,这种应用领域的程序设计特点是,通过字符串模式的匹配来引发动作。 词法分析程序的自动构造工具也广泛应用于许多方面,如用以生成一个程序,可识别印刷电路板中的缺陷,又如开关线路设计和文本编辑的自动生成等。 4.3.2 不确定的有穷自动机(NFA) NFA M=?K,?,f,S,Z?; 其中K为有穷非空集,它的每个元素为一个状态。 ? 为有穷输入字母表,它的每个元素为一个输入字符。 f为K? ?* 到K的子集(2 K)的一种映射; S?K是初始状态集; Z?K为终止状态集; NFA的状态图表示 NFA含有m个状态和n个输入字符。它的状态图可以描述如下: 这张图含有m个状态结点 每个结点可射出若干条箭弧与别的结点相连接。 每条弧用?* 中的一个串做标记。 整个图至少含有一个初态结点及若干个终态结点。 例4.7 一个NFA M=({0,1,2,3,4},{a,b},f,{0}, {2,4}),其中 f(0,a)={0,3};f(0,b)={0,1};f(1,b)={2}; f(2,a)={2}; f(2,b)={2}; f(3,a)={4}; f(4,a)={4}; f(4,b)={4}; 0 1 2 3 4 a a a,b a,b a,b b b 例子 NFA M=({S,P,Z},{0,1},f,{S,P},{Z}) 其中 f(S,0)={P} f(Z,0)={P} f(P,1)={Z} f(Z,1)={P} f(S,1)={S,Z} S P Z 0 0,1 1 1 1 类似DFA, 对NFA M=?K,?,f,S,Z?也有如下定义 ∑*上的符号串t在NFA M上运行 一个输入符号串t,(我们将它表示成Tt1的形式,其中T∈∑,t1∈ ∑*)在NFA M上运行的定义为: f(Q, Tt1)=f(f(Q,T),t1) 其中Q∈K. ∑*上的符号串t被NFA M接受 若t? ∑*,f(S0,t)=P,其中S0 ∈S,P ? Z, 则称t为NFA M所接受(识别) 对于Σ﹡中的任何一个串t,若存在一条从某一初态结到某一终态结的道路,且这条道路上所有弧的标记字依序连接成的串(不理采那些标记为ε的弧)等于t,则称t可为NFA M所识别(读出或接受)。若M的某些结既是初态结又是终态结,或者存在一条从某个初态结到某个终态结的道路,其上所有弧的标记均为ε,那么空字可为M所接受。 接受 000 111 1010001 110000001 不接受 00 01100 NFA M所能接受的符号串的全体记为 L(M) 结论: ?上一个符号串集V???是正规的,当且仅当存在一个?上的不确定的有穷自动机M,使得V=L(M)。 (0|1)*(000|111)(0|1) DFA是NFA的特例.对每个NFA  N一定存在一个DFA M ,使得 L(M)=L(N)。对每个NFA N存在着与之等价的DFA M。 有一种算法,将NFA转换成接受同样语言的DFA.这种算法称为子集法. 与某一NFA等价的DFA不唯一. 4.3.3 NFA→DFA的转换 从NFA的矩阵表示中可以看出,表项通常是一状态的集合,而在DFA的矩阵表示中,表项是一个状态,NFA到相应的DFA的构造的基本思路是: DFA的每一个状态对应NFA的一组状态. DFA使用它的状态去记录在NFA读入一个输入符号后可能达到的所有状态. 状态集合的运算 1. 状态集合I的ε-

文档评论(0)

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

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

1亿VIP精品文档

相关文档