- 1、本文档共117页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
上下文无关文法(CFG)在程序设计语言和编 译原理中有着重要的应用,因为上下文无关文法 可以用来阐述绝大多数的程序设计语言的句法结 构。此外上下文无关语言也可以作为描述语言翻 译方案的基础。 本章重点讨论: CFG的简化 CFG的两种范式 下推自动机(PDA)的概念 PDA与CFG之间的等价转换 上下文无关语言运算的封闭性 以及CFL的有关判定问题。 3.1 上下文无关文法的派生树(推导树) 一个上下文无关文法中的一个句型的派生过程可以用 —棵树来描述。 【例3-1.1】 给定文法G=({S,A},{a,b},P,S),其中 P: S?aAS|a, A?SbA|ba|SS。句型aabbaa的派生过程就可以 用一棵树来描述,如图3-1.1 所示。将此树的叶结点符号 从左到右读取下来构成的符 号串就是aabbaa。 1.派生树的定义 设文法 G =(VN,VT,P,S)是上下文无关文法, 如果一棵有序树满足下面四个条件,则它是棵派生树: (1) 它的每个结点标记的符号是(VN∪VT∪{ε}) 中的符号; (2) 根结点标记开始变元S; (3) 内结点标记的符号是变元,即是VN中的符号。 (4) 如果一个内结点标记为A,且X1,X2,…,Xk是A的从左 到右的所有子结点, 则A?X1X2…Xk是P中一个产生式。 (5) 如果一个结点标记符号是ε,则它是其父结点的唯 一儿子结点。 其中第(5)条是为了防止下面情况发生: 如产生式A?a(a是个终极符)被误认为 是A?aε或A?εa,而在派生树中被 画成如图3-2形式。 2.派生树的结果 设T是棵派生树,将此树的叶结点符号从左到右依次读 取下来构成的符号串就是此派生树的结果。 例如,图3-1.1派生树的结果就是aabbaa 。 3.派生树与句型的派生关系 设G =(VN,VT,P,S)是CFG,如果G中有派生S?*α, 则在G中必有一棵以α为结果的派生树。反之,如果G中 有一棵以α为结果的派生树,则G中也必有派生S ?* α。 可以说派生与派生树是一一对应的。 4.最左派生与最右派生 所谓最左派生,就是在一个派生的每一步都是对句型 中最左边的变元进行替换。 例如,例3-1中aabbaa的派生: S?aAS?aSbAS?aabAS?aabbaS?aabbaa , 此派生是最左派生。 所谓最右派生,就是在一个派生的每一步都是对句型 中最右边的变元进行替换。 S?aAS?aAa?aSbAa?aSbbaa?aabbaa, 此派生是最右派生。 5.上下文无关文法的二义性 设G是个CFG,如果它的某个句子有两棵不同构的派生 树,则称G是二义性的上下文无关文法。 【例3-1.2】 给定CFG G=({S},{a,b},P,S),其中P: S?aSbS|bSaS|ε。 句子abab的两棵不同构的派生树,如图3-1.3所示。 3.2 上下文无关文法的简化 一个上下文无关文法有时可以去掉一些符号,或者去 掉一些产生式以后,仍然和原来的文法等价,这就是所 谓文法的简化。 这里简化文法主要是指:去掉无用符号、去掉ε产生 式和去掉单一产生式。 1.去掉无用符号 定义:给定CFG G=(VN,VT,P,S),如果在G中存在派 生S ?*αXβ?*w,其中w∈VT*,X∈VN∪VT,则称 符号X是有用的,否则X是无用的。 简单地说,无用符号就是G中对任何w∈L(G)的派生中 都不会出现的符号。 【例3-2.1】给定文法G=({S,A,B,C},{a,b},P,S),其中P:S?AB|a, A?BC|a,C?b 。 G中有派生: 可见再往下就无法推导了,因而由S只能推出a,不能推 出其他符号串。所以此文法中,A、B、C、b都是无用的 符号,只有S和a是有用符号。 如何去掉无用符号?分两步走,使用两个引理,就可 以做到这一点。下面介绍这两个引理。 引理3-2.1 给定CFG G=(VN,VT,P,S),且L(G)≠Φ,可 以找到一个与G等价的CFG G’=(VN’,VT,P’,S),使得 每个A∈VN’,都有w∈VT*,且在G’中有A?*w。 证明:1)求VN’的算法: begin ⑴ OLDVN:=Φ ⑵ NEWVN:={A|A?w∈P 且w∈VT*} ⑶ While OLDVN≠NEWVN do begin ⑷ OLDVN:=NEWVN ⑸ NEWVN:= OLDVN∪{A|A?α∈P,且α∈(VT∪
文档评论(0)