语法分析文法等价变换教学课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章:语法分析 文法等价变换 文法等价变换的概念 文法的等价 对文法G1和G2,若有:L(G1)=L(G2),则称文法G1和G2等价, 记作:G1=G2. 文法等价变换 1.增加拓广产生式 2.删除无用规则 3.消除特型产生式 4.消除空产生式 5.提前公共前缀 6.消除直接左递归 7.消除左递归 1.增加拓广产生式 定理一:对任一文法G1都可以构造文法G2,使得L(G1)=L(G2),G2的开始符不出现于任何产生式的右部。 证明:假设S是G1的开始符,若S出现在某规则的右部,则引入新的语法符号S,增加一条新产生式S?S即可,其中S是新的开始符。 1.增加拓广产生式 例: G1[Z]: Z → abZA | a   A → b    G2[Z]:   Z →Z    Z → abZA |a    A →b 2.删除无用规则 无用产生式: 若存在非终极符A,它不出现于该文法的任何一个句型中,则关于A的产生式是多余的(无用产生式、不可到达的产生式). 定理二 对任一文法G1都可以构造文法G2,使得L(G1)=L(G2),并且G2中的每个非终极符必出现在它的某个句型中. 2.删除无用规则 证明:根据G1,构造文法G2的方法如下: (1) 令?={Z | Z是文法的开始符}. (2) 递归扩充?直到收敛为止,即: ?=??{B | A?xBy?G1, B?VN, A??}. (3) 若一个产生式左部非终极符A??,则删除以A为左部的所有产生式. 2.删除无用规则 例子: Z?aB|bc B?bC|a A?aB|a C?c D?AB|a 3.消除特型产生式 特型产生式 若文法中的产生式具有形式A?B(B为非终极符),则称该产生式为特型产生式. 特型产生式的缺点是在语法分析中会降低分析的速度,因此应该消除这样的产生式. 定理三 对任一文法G1,可以构造文法G2,使得L(G1)=L(G2),并且在G2中没有特型产生式. 3.消除特型产生式 证明:构造无特型产生式的文法G2的方法如下: (1) 对文法G1中每个非终极符A,求集合: ?A={B | A=+B, B?VN}. (2) 若B??A,且B??是文法G中的一个非特型产生式,则补充如下规则: A?? (3) 去掉文法G1中的所有的特型产生式. (4) 去掉新的文法中的无用产生式. 3.消除特型产生式 例子 A?B|D|aB B?C|b C?c D?B|d 3.消除特型产生式 例子 E?E+T E?T T?T*F T?F F?(E)|i 4.消除空产生式 空产生式:A?ε PASCAL语言例子: 声明部分?var 标号声明 常量声明 类型声明 变量声明 过程函数声明 变量声明?类型标识符变量声明|ε 定理四:对任一文法G1,可构造文法G2,使得L(G1)=L(G2),且G2中无空产生式。 4.消除空产生式 ?={A|A??},直接推出空的非终极符 ?=??{A|A ?+?, ???+},递归扩展隐式的可以推出空的非终极符 对于文法中任意产生式 A?X1…Xi-1XiXi+1…Xn(n≥2),若Xi??, 补充规则 A? X1X2…Xi-1Xi+1…Xn 重复3,直到不产生新的产生式。 删除所有形如A??的产生式。 4.消除空产生式 例子 A?aBcD B?b|? D?BB|d 5.提取公共前缀 公共前缀:A的不同产生式的右部具有相同的前缀. 这种情形不满足自顶向下的语法分析条件. 可用提取左因子的方法消除产生式的公共前缀.假定关于A的规则是: A???1 | ??2 |…| ??n | ?1| ?2 |…| γm (其中每个?不以?开头) 则将这些规则写成: A??A’ | ?1 |γ2|…|γm A’??1 | ?2 |…|?n 经过反复提取左因子,就能够使每个非终极符的不同产生式的右部具有不同的前缀. 5.提取公共前缀 例子: A?aB|aC|aD B?bB|bD|c D?d 6.消除直接左递归 对于简单情形A?A?|? 即有A??αα…α 则转化 A??A A??A|? 对于一般情形 A?A?1 | A?2 |…| A?m | ?1 | ?2| …| ?n 则转化 A?( ?1 | ?2 |…| ?n ) A A?(?1 | ?2 |…|

文档评论(0)

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

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

1亿VIP精品文档

相关文档