形式语言与自动机理论-03.ppt

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

第3章 正则表达式与正则语言 西北工业大学计算机学院 康慕宁 启示 在前面我们已经用到了一些类似正则表达式来表示语言: – L(G)={0n|n≥1} – L(G)={anbn |n≥1} – L(G)={0n1m2k|n,m,k≥1} 这种表示法的优点: – 比文法和有穷状态自动机简单; – 更接近集合表示和计算机表示。 正则表达式的形式定义 定义:设Σ是一个字母表,那么 (1) φ是Σ上的正则表达式(regular expression, 简记为RE),它表示语言φ。 (2) ε是Σ上的RE,它表示语言{ε}。 (3) 对于?a∈Σ,a是Σ上的RE,它表示语言{a}。 (4) 如果r和s分别是Σ上表示语言R和S的RE,则 r与s的“和” : (r)+(s) 是Σ上的 RE ,表达的语言为R∪S。 r与s的“乘积”: (r)·(s) 是Σ上的 RE ,表达的语言为RS。 r的克林闭包: (r)*是Σ上的 RE ,表达的语言为R*。 (5) 只有有限使用规则(1)-(4)所得的表达式才是Σ上的RE 。 RE举例 设Σ={0,1},下面是Σ上的RE: (1) φ,表示语言φ。 (2) ε,表示语言{ε}。 (3) 0,表示语言{0}。 (4) 1,表示语言{1}。 (5) (0+1),表示语言{0,1}。 (6) (01),表示语言{01}。 (7) ((0+1)* ),表示语言{0,1}*。 (8) ((01)(01)* ),表示语言{01}{01}*。 (9) ((((0+1)* )000)((0+1)* )),表示至少含有3个连续0的串组成的语言。 (10) ((((0+1)* )0)1),表示所有以01结尾的字符串组成的语言。 (11) (1(((0+1)* )0)),表示所有以1开头以0结尾的字符串组成的语言。 运算优先级 上面的例子中,正则表达式中所含扩号太多,带来准确性和许多麻烦。为了省去这些扩号,需要约定正则表达式中运算的优先级。 闭包运算的优先级最高,乘运算的优先级次之,加运算的优先级最低。 加、乘、闭包运算均执行左结合规则。 “·”运算在不影响顺序情况下,可省略 例如: – ((((0+1)* )0·0·0) ·((0+1)* ))=(0+1)* 000(0+1)* – ((((0+1)* ) ·0) ·1)=(0+1)* 01 – (1· (((0+1)* ) ·0))=1(0+1)* 0 正则表达式的等价 正则表达式表示的语言: 在意义明确时,正则表达式r表示的语言记为L(r)或Lr。 设r,s是字母表Σ上的正则表达式,如果L(r)=L(s),则r称为与s相等(equivalence,也称为等价),记作r=s。 例如: (0+1)*(0+1)(0+1)* = (0+1)(0+1)* ,因为它们表示的语言都是{0,1}+。 正则表达式运算定律 可以证明,对字母表Σ上的正则表达式r,s,t,下列各式成立: (1) 结合律:(rs)t = r(st), (r+s)+t = r+(s+t) (2) 分配律:r(s+t) = rs+rt, (s+t)r = sr+tr (3) 交换律:r+s = s+r, 注意rs ≠ sr (4) 幂等律:r+r = r, 注意rr ≠ r (5) 加法运算零元素:r+φ = r, 注意不是r+ε = r (6) 乘法运算单位元:rε = εr = r (7) 乘法运算零元素: rφ = φr = φ (8) L(φ) = φ (9) L(ε) = {ε} (10) L(a)={a} (11) L(rs)=L(r)L(s) 正则表达式运算定律(2) (12) L(r+s) = L(r)∪L(s) (13) L(r*) = (L(r))* (14) L(φ*) = {ε} (15) L((r+ε)*) = L(r*) (16) L( (r*)* ) = L(r*) (17) L( (r*s*)* ) = L( (r+s)* ) (18) 如果L(r)?L(s),则r+s=s。 幂的定义 正则表达式到FA的等价变换 思路: – 正则表达式是以递归的形式定义的,包括三种基础(φ,ε,a)与三种运算符(加,乘,克林闭包)。任何一个正则表达式都可以看作是基础经过若干运算产生的。 – 因此,可以对正则表达式中所含运算符个数施归纳。首先对三种基础表达式都给出等价的FA,然后为每种运算构造等价的FA。 – 为了构造FA方便起见,对于构造的FA进行一些限制:有且只有一个终止状态,而且在终止状态下不做任何移动。 正则表达式到FA的等价变换-举例 正则语言可以用正则表达式表示 正则语言可以用正则

您可能关注的文档

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档