第2章词法分析.ppt

  1. 1、本文档共96页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
a 2 3 2 5 2 4 2 6 1 2 0 a b b a a b a b b a a b b 于是得到对应的 DFA 如下: 2.4.3 DFA M 的化简 NFA 确定化所得的 DFA 可能含有多 余的状态 , 需化简。所谓 DFA M 的化简 , 是指寻找一个状态数比 M 少的 DFA M , 使得 L(M)=L(M) 。 化简后的 DFA M 满足下述条件: (1) 无多余状态; (2) 状态集中无相互等价的状态。 两个状态相互等价 是指 : 对于给定的 DFA M, 假定状态 s 1 ,s 2 ∈ S 且 s 1 ≠s 2 , 若从 s 1 出发能识别字符串 ? 而停于终态 , 从 s2 出 发也能识别 ? 而停于终态 ; 反之 , 若从 s 2 出 发能识别 ? 而停于终态 , 从 s 1 出发也能识 别 ? 而停于终态 , 则称 s1 和 s2 等价 , 否则称 s1 和 s2 是 可区分 的。 DFA M 的 状态最小化过程 : 将 M 的状态集分割成一些不相交的 子集,使得任意两个不同子集的状态是 可区分的,而同一子集中的任意两个状 态都是等价的。最后 , 从每个子集中选出 一种状态,同时消去其它等价状态,就 得到最简的 DFA M 且 L(M)=L(M) 。 DFA M 的化简方法 : (1) 首先将 DFA M 的状态集 S 中的终态与非 终态分开 , 形成两个子集 , 得到基本划分。 (2) 对当前已划分出的 I (1) ,I (2) , … ,I (m) 子集 , 看 每个 I 是否能进一步划分。对某个 I (i) = {s 1 ,s 2 , … ,s k }, 若存在输入字符 a ∈ Σ 使得 I a (i) 不全包含 在当前划分的某个子集 I (j) 中 , 即跨越两个子集 , 则将 I (i) 一分为二。 (3) 重复 (2), 直到每个子集均 不能再分 。 不能再分是指子集要么仅有一个状态, 要么有多个状态但这些状态不可区分。 (a) 无需划分 (b) 需划分 s 4 s 3 s 3 s 1 s 2 s 1 s 2 a a a a 如何进行子集的划分呢 ? 假定当前子集 I (i) ={s 1 ,s 2 , … }, 其中 s 1 和 s 2 经 过有向边 a 分别到达状态 t 1 和 t 2 , 而 t 1 和 t 2 分属 于当前已划出的两个不同子集 I (j) 和 I (k) , 则应 将 I (i) 分为两部分: I (i1) = {s | s ∈ I (i) 且 s 经有向边 a 到达 t 1 } I (i2) = I (i) ?I (i1) 由于 t 1 和 t 2 是可区分的, 因此 I (i1) 中的状态与 I (i2) 中的状态可区分。 下面以标识符为例来说明 正规式 与正规集 : 标识符 是以字母开头的字母数字串。 若用 letter 表示字母 , 用 digit 表示数字 , 则 标识符 可表示为 : letter(letter|digit )* 其中 并置 表示两者的连接 , ∣表示两者选一 , * 表示零次或多次引用。 letter(letter|digit)* 为 标识符的正规式 , 该正规式表示的集合为 标识符的正规集 。 正规式 和 正规集 的递归定义: (1)ε 和 Ф 为字母表 Σ 上的 正规式 , 它们表示的 正规集 分别为 {ε} 和 Ф 。 (2) 对任一 a ∈ Σ, a 是 Σ 上的正规式, 它表示的正规集为 {a} 。 (3) 若 R 和 S 是 Σ 上的正规式 , 它们表示的 正规集为 L(R) 和 L(S), 则 ① R|S 是 Σ 上的正规式, 它表示的正规集为 L(R) ∪ L(S) ; ② R · S 是 Σ 上的正规式, 它表示的正规集为 L(R)L(S); { 连接积 } ③ (R)* 是 Σ 上的正规式, 它表示的正规集为 (L(R))* ; { 闭包 } (4) 仅由有限次使用 (1)~(3) 得到的表示式是 Σ 上的正规式 , 它表示的集合是 Σ 上的 正规集。 说明: 1Σ 上的一个 字 指的是由 Σ 中字符构成的 一个有穷序列 ; 不包含任何字符的序列称为 空字 ε 。 Σ * 表示 Σ 上所有字的全体 , 包括空字 ε 。 例如 , 若 Σ={a, b} 则 Σ * ={ε, a, b, aa, ab, ba, bb, aaa, … } 2Ф 表示不含任何元素的空集 {} 。 注意 ε 、 {} 和 {ε} 的区别 : ε 表示不包含任何字符的序列 , 它是正 规集中的一个元素; {} 表示不含任何字 的集合 , 它是一个空的正规集; {ε} 表示 由空字组成的集合。 3 使用

文档评论(0)

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

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

1亿VIP精品文档

相关文档