形式语言与自动机ch4.2要点.ppt

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

fall 2001 § 4.2 上下文无关文法的变换 CFG 的简化 消无用符号 消 ? 产生式 消单产生式 对生成式形式进行标准化 生成式的标准形式 Chomsky范式 (CNF - Chomsky Normal Form) 生成式形式为A→BC, A→a, A, B, C∈N , a∈T (后面将证明, 每个上下文无关文法都有一个CNF文法) Greibach范式 (GNF) 生成式形式为A→aβ, a∈T , β∈N* 意义: 对每个2型语言都可找到一个文法使产生式的右端都以终结符开始 中心思想:消除左递归. *College of Computer Science Technology, BUPT 变换算法 -- 消去无用符号 无用符号(useless symbol) 非生成符号 不可达符号 有用符号(useful symbol) 对于 CFG G = (N, T, P , S ),称符号 X ? N ? T 是有用的,当且仅当 S ? ?X? ? w,其中 w ?T* ,?, ? ?(N ? T )* . 称符号 X 是生成符号(generating symbol),当且仅当存在w ?T* ,满足 X ? w. 称符号 X 是可达符号(reachable symbol),当且仅当存在?, ? ?(N ? T )* ,满足 S ? ?X?. ? ? ? ? 计算生成符号(generating symbol)集 计算可达符号(reachable symbol)集 消去非生成符号、不可达符号 消去无用符号 消去相关产生式 计算生成符号集 思路 对于 CFG G = (N, T, P , S ),可通过下列归纳步骤计算生成符号集合: 基础 任何终结符 a ?T 都是生成符号; 归纳 如果有产生式 A ? ? ,其中 ??( N ? T )* 的每一个符号都是生成符号,则 A 也是生成符号; 步骤: (1) N 0 = ? (赋为?) N 0为有用的非终结符集 (2) N’ = {A | A→ω且ω∈T*} N’为非终结符集合 (3) 如果N 0≠N’ 则转(4),否则转(6) (4) N 0=N’ (5) N’= N 0∪{ A | A→α且α∈(T∪N 0)* }, 转(3) (6) N 1 = N’ 小结: 算法1找出能推出终结符串的非终结符作为有用符号. 算法1: 找出有用非终结符 一层层向外扩展,直至最外两层相等为止。所得集合即是算法1的有用符号。 算法1: 找出有用非终结符(图示) 计算可达符号集 思路 对于 CFG G = ( N, T, P , S ),可通过下列归纳步骤计算可达符号集合: 基础 S 是可达符号; 归纳 如果 A 是可达符号,并且有产生式 A ? ? ,其中 ? ? ( N ? T )* ,则 ? 中的每一个符号都是可达符号; 算法步骤: (1) N 0 = {S} (2) N’= {x | A∈N 0 且A→αxβ}∪∈ N 0 (N’为有用符号集合) (3) 如果N 0≠N’转(4), 否则转(5) (4) N 0=N’; 转(2) (继续迭代下去) (5) N 0 = N’ ∩ N T1=N’∩T P1由P内只含N’中符号的生成式组成 (即删去了从S起不可达的符号). 算法2: 找出有用符号(从S可达的符号) 一层层外扩,找出从S可达的所有符号(含非终结符和终结符) 算法2: 找出从S可达的符号 (图示) 消去非生成符号及不可达符号 例: (书P135 例1) 已知2型文法G=({S, A, B}, {a}, P, S) P: S→AB, S→a, A→a 由算法1: B推不出终结符串, 删除之, 并删S→AB. N1={S, A}, P1: S→a, A→a 由算法2: A不出现在S能推导出的句型中, 删除之. 并删A→a ∴ 结果为G1=({S}, {a}, { S→a}, S ) 应用算法1和算法2,可删去文法中所有无用符号. 消去非生成符号及不可达符号 注意: 必须先执行算法1,再执行算法2,不能颠倒. 否则,可能导致无用符号不会被完全删除. 例: 上例中,若先用算法2,得 S→a, A→AB, A→a 再用算法1, 得S→a, A→a。而A→a是多余的. 定理: 任何非空的上下文无关语言,可由不存在无用符号的上下文无关语言产生(证明

文档评论(0)

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

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

1亿VIP精品文档

相关文档