- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
FOLLOW(S)={#} FOLLOW(A)={a,#,c} FOLLOW(B)={#} FOLLOW(C)={#} FOLLOW(D)={#} 4.计算产生式的SELECT集 根据上面文法的FIRST集和FOLLOW集计算得结果如下表所示,该表表示的是文法的FIRST集合和FOLLOW集合。 非终结符名 是否推出? FIRST集 FOLLOW集 S 是 {b,a } {#} A 是 {b, ?} {a,c,#} B 是 {a, ?} {#} C 否 {a,b,c} {#} D 否 {a,c} {#} SELECT(S?AB)=(FIRST(AB)-{?})∪FOLLOW(S)={b,a,#} SELECT(S?bC)=FIRST(bC)={b} SELECT(A??)={FIRST(?)-{?}}∪FOLLOW(A)={a,c,#} SELECT(A?b)=FIRST(b)={b} SELECT(B??)={FIRST(?)-{?}}∪FOLLOW(B)={#} SELECT(B?aD)= FIRST(aD)={a} SELECT(C?AD)= FIRST(AD)={a,b,c} SELECT(C?b)= FIRST(b)={b} SELECT(D?aS)= FIRST(aS)={a} SELECT(D?c)= FIRST(c)={c} 由以上计算结果可得相同的左部产生式的SELECT交集为: SELECT(S?AB)∩SELECT(S?bC)={b,a,#}∩{b}={b}≠? SELECT(A??)∩SELECT(A?b)={a,c,#}∩{b}=? SELECT(B??)∩SELECT(B?aD)={#}∩{a}=? SELECT(C?AD)∩SELECT(C?b)={b,a,c}∩{b}={b}≠? SELECT(D?aS)∩SELECT(D?c)={a}∩{c}=? 由LL(1)文法定义知该文法不是LL(1)文法。 将某些非LL(1)文法转变成LL(1)文法 采用确定的自顶向下分析要求给定的文法必须是LL(1)文法,但并不是所有的文法是LL(1)文法。 有些文法,如果该文法含有直接左递归或间接左递归,或含有左公共因子则称该文法肯定不是LL(1)文法,要想将非LL(1)文法改为LL(1)文法,必须进行等价变换。 提取左公因子 将含有形如A???|??格式的产生式的文法叫做直接左公因子。 直接左公因子会导致相同左部的产生式,其右部的FIRST 集合有交集,即:SELECT(A???)∩SELECT(A???)≠?,不满足LL(1)文法的充分必要条件。 含有左公因子的文法不是LL(1)文法,我们必须要将非LL(1)文法改为LL(1)文法。 将A???1|??2|??3|...|??n,提取左公因子后变为: A??(?1|?2|?3|...|?n)引进非终结符A′,变为: A??A′ A′??1|?2|?3|??n 如果改进后,仍然含有左公因子,可以继续提取,直到不再含有左公因子为止。 例: 设有文法如下: S?S;T S?T T?if e then S else S T?if e then S T?a 将T?if e then S else S和T?if e then S 两个产生式提取左公因子后,变为: T?if e then S( else S|?),引进新的非终结符T?, 产生式规则变为: T?if e then S T ? T?? else S|? 该文法变为: S?S;T S?T T?if e then S T ? T?? else S|? T?a 例: 若文法的产生式为: S?aSb S?aS S?? 根据消除左公因子的公式,文法变为: S?aS(b|?) 引进非终结符A后得到 S?aSA A?b|? 文法变为: S?aSA A? b|? S?? 在某些文法中有些左公因子可能是隐式的,在这种情况下,要将产生式规则进行替换。 例:有某个文法,其产生式为 A?ad A?Bc B?aA B?bB 将文法的产生式规则为: A?ad A?aAc A?bBc B?aA B?bB 从上面的式子可以看出仍旧含有左公因子。提取左公因子后得到 A?a(d|Ac) A?bBc B?aA B?bB 引进A?后得到产生式为 A?aA? A?bBc A??d A??Ac B?aA B?bB 例: S?Ap|Bq A?aAp|d B?aBq|e 不一定每个文法的左公共因子都能在有限的步骤内替换成无左公共因子的文法。 一个文法提取了左公共因子后,只解决了相同左部产生式右部的FIRST集不相交问题,当改
原创力文档


文档评论(0)