- 1、本文档共93页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理2前后文无关文法与语言
* 例如: E→E+E|E*E|(E)|i 句子i+i*i,同是最左推导,对应两棵不同的语法树: E=E+E =i+E =i+E*E =i+i*E =i+i*i 最左推导1: E E E i E E i i + * * 例如: E→E+E|E*E|(E)|i 句子i+i*i,同是最左推导,对应两棵不同的语法树: E=E*E =E+E*E =i+E*E =i+i*E = i+i*i 最左推导2: E E E E E i * i + i * 句柄:i, i, i, E*E ,E+E 表示:i+(i*i) 句柄:i, i, E+E, i, E*E 表示:(i+i)*i E E E i E E i i + * E E E E E i * i + i 语法树1: 语法树2: * 文法的二义性:某一句子有二个不同的最左(右)推导或二个不同的最左(规范)归约; 文法的二义性是不可判定的:不存在一种算法,只能用一些简单条件来判定是充分的,不是必要的,即满足某些条件的文法可以说是二义性的; 特例:若一文法G既含左递归又含右递归,则G必是二义性文法; * 以上的分析中,忽略了两个问题: 自顶向下分析时:如有V→x1|x2…|xn,选哪一产生式可一次推导成功? 自底向上分析时,如何尽快找到当前句型的句柄?(进行归约) 这些问题将在语法分析时解决 * 2.4 文法的化简和改造 文法的实用限制 无用符号和无用产生式的删除 ε-产生式 的消除(自己看书) 单产生式的消除(自己看书) 扩充的BNF表示 * 2.4.1 文法的实用限制 在实用中,我们将限制文法中不含有: 一、无用产生式 二、有害产生式 * 无用产生式:一个产生式的左部或右部含有无用符号。 2.4.1 文法的实用限制 设G=(Vn,Vt,P,S)是一文法,G中的符号X∈Vn∪Vt是有用的,则X 必满足: ①存在α,β∈V*,有S αXβ; ②存在w∈Vt*,使得αXβ w; 否则,称符号X是无用的; 一、无用产生式: 至少在某一推导过程中出现 由X能推出终结符号 * 二、有害产生式: V→V 即使V是一个有用的符号,此类产生式也是不必要的; 如果一个句型中含有非终结符号V,那么可以任意多次使用产生式V→V,这样会引起二义性; * 例如: G1[S]:S→0S1|01 G1无二义性文法 G2[S]:S→0S1|01|S G2二义性文法 对于句子0011的语法树 北京交通大学 于双元 * G2文法句子0011 的两棵不同语法树. S S S 0 S 1 0 S 1 0 1 0 1 * 不含无用产生式; 不含形如V→V的产生式; 满足上述条件的文法称化简过或压缩过的文法。 * 2.4.2 无用符号和无用产生式的删除 算法2.1:将文法G=(Vn,Vt,P,S) 改造为等价文法G1=( Vn①,Vt,P①,S),使得对于任意X∈Vn①,满足X w1,其中w1∈Vt*,即G1中的任一非终结符号均能推导出终结符号串; 算法2.2:对于给定文法G改造为等价G’=(Vn’,Vt’,P’,S),使得使得对于任意X∈Vn’∪Vt’,都存在α,β∈(Vn’∪ Vt’)*,有S αXβ; 假定L(G) ≠? * 算法2.1: ①分别置Vn①,P①为?; ②对于P中的每一产生式A→δ,若δ∈Vt*,则将A置于Vn①中; ③对于P中的每一个产生式A→X1X2X3……Xm,若每一个Xi都属于Vt或Vn①则将A置于Vn①中; ④重复步骤③,直到Vn①不再增大为止; ⑤对于P中的每一产生式B→Y1Y2……Yn,若B及每一个Yi都属于Vn①∪Vt,则将此产生式B→Y1Y2……Yn置于P①; * 算法2.2: ①分别置Vn’,Vt’及P’为?; ②将文法G的开始符号S置于Vn’中; ③对于G中任何形如A→α1|α2|…|αm的产生式,如果A∈Vn’,则将符号串α1, α2, ……αm中全部的非终结符号置于Vn’中,而将其中的全部终结符号置于Vt’中; ④重复步骤③,直到Vn’和Vt’都不再增大为止; ⑤将P中左右部仅含Vn’∪ Vt’中的符号的所有产生式置于P’; * 例如: 文法G=
文档评论(0)