编译原理3词法2剖析.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DFA的最小化 算法的核心 把M的状态集K分成不相交的子集。 结论 接受L的最小状态有穷自动机不计同构是唯一的。 DFA M =(K,∑,f, k0,, kt),最小状态DFA M’ 1.构造状态的初始划分?:终态kt 和非终态K- kt两组 2.对∏施用传播性原则 构造新划分∏new 3. 如∏new =∏,则令 ∏final=∏ 并继续步骤4,否则∏:=∏new重复2 4.为∏final中的每一组选一代表,这些代表构成M’的状态。若k是一代表且f(k,a)=t,令r是t组的代表,则M’中有一转换f’(k,a)=r M’ 的开始状态是含有K0的那组的代表 M’的终态是含有Kt的那组的代表 5.去掉M’中的死状态. DFA的最小化 初始划分:一个由终态组成,一个由非终态组成 P0=({1,2,3,4},{5,6,7}) 观察第一个子集,在读入a之后划分为P1=({1,2},{3,4},{5,6,7}) 观察第二个子集,在读入a之后划分为P1=({1,2},{3},{4},{5,6,7}) 观察第四个子集,在读入a之后划分为P1=({1,2},{3},{4},{5},{6,7}) 正则文法与有限自动机的等价性 对于正则文法G和有限自动机M,如果L(G)=L(M),则称G和M是等价的。关于正则文法和有限自动机的等价问题,有以下结论: 对每一个右线性正则文法G或左线性正则文法G,都存在一个正则自动机(FA)M,使得L(M)=L(G)。 对每一个FA M,都存在一个右线性正则文法GR和左线性正则文法GL,使得L(M)=L(GR)=( GL)。 正则文法与有限自动机的等价性 正则文法 GR={0,1},{A,B,C,D},A,P其中P由以下产生式构成 A→0|0B|1D B→0D|1C C→0|0B|1D D→0D|1D A B D C 0 0 1 0 1 0,1 1 A B D C 0 0 1 0 1 0,1 1 F 0 0 正则表达式和有限自动机的等价性 关于正则表达式与自动机的等价性,有如下性质: 对任何FA M,都存在一个正则表达式r,使得L(r)=L(M)。 对任何正则表达式r,都存在一个FA M,使得L(M)=L(r)。 正则表达式和有限自动机的等价性 对于简单的正则表达式: 对于正则表达式Φ,所构造的NFA为: 对于正则表达式ε,构造的NFA为: 对于正则表达式a,a∈∑,构造的NFA为: 正则表达式和有限自动机的等价性 若s,t为∑上的正则表达式,相应的NFA分别为N(s)和N(t),则 对于正则表达式R=s | t,所构造的NFA(R)为: 对于正则表达式R= st,构造的NFA(R)为: 对于正则表达式R=S*,构造的NFA(R)为: Thanks for your time! Questions Answers * * * * * * * * * * * * * * * * * * * * Part3词法分析 授课:胡静 内容提要 词法分析器的作用 词法分析程序的设计与实现——状态图 词法分析程序的自动生成——有穷自动机 正则表达式与有限自动机 问题的提出 如果只向前看一个字符,不能够确定我们将要读入的是哪种类型的token 如果token的开头是“i”,那么它一定是标识符么? 如果token的开头是“2”,那么它一定是一个整型的常数么? 如果我们通过上面的类似“插入”式的方法来写识别token的程序,这样的程序不容易写正确,而且也不容易维护 因此需要一个更加有原理性的方法:词法分析器的生成器,可以自动产生有效的词法分析器。(例如lex,flex,Jlex) 一般说来,没有限制的向前看是必要的 一些问题 如何明确的描述tokens 2.e0 20.e-01 2.0000 “” “x” “\\” “\”\’” 如何将文本分割成tokens if (x == 0) a = x1; if (x == 0) a = x1; 如何描述tokens 我们可以使用正则表达式来描述程序设计语言中的tokens。正则表达式的定义如下: 正则集合(语言) 正则表达式的例子 令?={a,b}, 正则表达式 正则集合集 a {a} a?b {a,b} ab {ab} (a?b)(a?b) {aa,ab,ba,bb} a ? {? ,a,a, ……任意个a的串} (a?b)? {? ,a,b,aa,ab ……所有由a 和b组成的串} (a?b)?(aa?bb)(a?b)? {??上所有含有两个相继的a或两个相继的b组成的串} 正则表达式的例子 ?={a,b},r=a(a ?b) ?定义的正则集合: {a,aa,ab,abb,……} ?={

文档评论(0)

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

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

1亿VIP精品文档

相关文档