第三章有限自动机与词法分析器-Read.pptVIP

第三章有限自动机与词法分析器-Read.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章有限自动机与词法分析器-Read.ppt

2.3 正则表达式 主要内容: 1.正则表达式和正则集; 2.正则表达式和有限自动机的相互转化。 一、正则表达式和正则集 描述程序设计语言中单词的一种简单而且数学化工具。 表示符号串的构成模式。 正则表达式r定义了一个符号串集合rs, rs内的每个符号串都与r所定义的模式相匹配,rs称为由r生成的语言,记作L(r)。 正则表达式所表示的符号串集合又称为正则集。 正则表达式是表示給定字母表上的符号串集合的一种工具。 (一)正则表达式和正则集的定义 定义1:设∑为有限字母表,在∑上的正则表达式和正则集可递归定义如下: (1) ? 和?是∑上的正则表达式,它们表示的正则集分别为{ε}和?; (2) 对任何a∈∑,a 是∑上的正则表达式,它所表示的正则集为{a}; (3) 若r,s都是正则表达式,它们表示的正则集分别为R和S, 则(r)、r|s、r?s、(r)*也是正则表达式,它们分别表示的正则集是:R,R∪S , RS和R*。 (4) 有限次使用上述三条规则构成的表达式,称为∑上的正则表达式,仅由这些正则表达式表示的集合称为正则集。 注意: 1.“|” 读作“或”,“?” 读作“连接”,“ * ” 读作“闭包”。 2. “|” 、“?” 和“ * ”的优先级为:先“ * ”、次“?”、最后“|”。 3. “|” 、“?” 和“ * ”的结合性为左结合。 (二)正则表达式示例 ?={ a,b }. (三)正则表达式的性质 (四)扩充的正则表达式 一次或多次重复: A+ 任何符号: “…” 在字母表中任何符号. 符号范围: [0--9] [a--z] [A--Z] 不在给定范围内的符号: ~(a|b|c)或[La] [Labc] 0或1次(可选): r?=(? |r) (五)正则定义 为较长的正则表达式提供一个简化了的名字。例:为一个或多个数字组成的数字序列写一个正则表达式,则可写作: (0|1|2|3|4|5|6|7|8|9) (0|1|2|3|4|5|6|7|8|9)* 或写作 digit digit* 其中 digit就是数字的正则定义,表示为: digit = 0|1|2|3|4|5|6|7|8|9 例:程序设计语言中单词的正则表达式定义 保留字 如 Begin=begin 标识符 letter=[a-z,A-Z] digit=[0-9] identifier=letter(letter|digit)* 数字 整数Int=[1-9]Digit*|0 实数real=Int.Int 特殊符号 +|-|… (六)正则表达式的局限性 正则表达式不能用于描述配对或嵌套的结构 正则表达式不能用于描述重复串 例:{w c w | w是a和b的串}无法用正则表达式表示(保证两边w是相同的)。 二、正则表达式和有限自动机的相互转化 定理 1 对∑上的每一个正则表达r,存在一个∑上的非确定有限自动机M,使得 L(M) = L(r) 。 证明:对于字母表∑上的任意一个正则表达式R,一定可以构造出一个非确定有限自动机 M, 使得L(M)=L(R)。 Step1:首先构造此非确定有限自动机M的初始状态S和终止状态Z,由S射出指向Z的有向弧上标记正则表达式R, step2:反复利用下述的替换规则对正则表达式R依次进行分解,直至状态转换图中所有有向弧上标记的符号都是字母表∑上的元素或?为止。 例 :有正规表达式(a|b)*aa, 为之构造等价的NFA。 定理2:对于字母表∑上的非确定有限自动机M,存在∑上的正则表达式R,使得L(R) = L(M)。 证明: Step1:在M的状态转换图中加入两个节点,一个是唯一的开始状态节点S,另一个是唯一的终止状态节点Z 。从S出发用标有ε的有向弧连接到M 的所有初始状态节点上,从M 的所有终止状态节点用标有ε的有向弧连接到Z节点. Step2:反复利用下述的替换规则进行替换,直到状态转换图中只剩下节点S和Z,在S指向Z的有向弧上所标记正则表达式就是所求的结果。 规则1及规则2: 规则3: 例 有如下图所示的NFA M,试构造与之等价的正则表达式r 单元总结 三个工具: 文法、 有限自动机、正则表达式 三个算法: 正则表达式与FA的相互转换 NFA到DFA的转换 DFA的化简 一个实现: DFA的实现 作业 S={a,b,c} 试给出S-上一个不包含连续两个b的所有符号串集合的正则定义. S={a,b,c} 叙述正则式((b|c)*a(b|c)*a)*(b|c)* 描

文档评论(0)

18273502 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档