编译原理-辽宁工大(郭伟)4_自上而下语法分析.ppt

编译原理-辽宁工大(郭伟)4_自上而下语法分析.ppt

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

6)例4.7 算法应用于文法G E —> TE′ 填法: ∵ FIRST(TE′)=FIRST(T)={ ( , id } ∴ M[ E , ( ] = { E —> TE′} M[ E ,id] = { E —> TE′} E —> +TE′ 填法: M[ E, + ] = { E —> +TE′} E ′—> ε填法: ∵ FOLLOW(E′)={ ), # } ∴ M[ E′, )] = { E ′—> ε} M[ E , # ] = { E ′—> ε} 构造不带回溯的自上而下分析的文法条件 (1) 文法不含左递归; (2) 对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交。即,若 A→α1|α2 |…|αn 则 FIRST(αi)∩FIRST(αj)=? (i≠j) (3) 对文法中的每个非终结符A,若它存在某个候选首符集包含ε,则 FIRST(A)∩FOLLOW(A)= ? 如果一个文法G满足以上条件,则称该文法G为LL(1)文法。 1.定义 若文法G的预测分析表M中不含有多重定义项,则称G为LL(1)文法。 注: 1)LL(1)文法是无二义的,二义文法一定不是LL(1)文法; 2)LL的含义是从左到右扫描输入串,采用最左推导分析 句子; 3)数字1表示分析句子时需向前看一个输入符号; 4)有LL(1)就有LL(k),LL(k)向前查看k个输入符号,选 择候选式更加准确,但M的尺寸会以nk增长,其中 n=|∑|+1,对程序设计语言取k=1就够了。 LL(1)文法 2 .证明定理 文法G是LL(1)文法当且仅当对于G的每个非终结符A的任何两个不同产生式A a|b有: 1)First(a) ∩ First(b)=Φ 2)若e∈First(b),则First(a) ∩ Follow(A) =Φ 注: 1)可以使用这个定理直接根据首符集,随符集来判断文法是否是LL(1),但判断之前,必须消除左递归和提取公共左因子,因为包含左递归和公共左因子的文法肯定不是LL(1)文法; 2)LL(1)文法只是上下文无关文法的一个子集。 LL(1)文法 例:判断下面文法是不是LL(1)文法 S if E then S else S |if E then S |other E b 解:首先对文法进行改造,消除文法左递归和提取公共左因子; 文法改写为: S if E then S S’|other S’ else S|e E b 第二步求首符集和随符集 First(S)={if,other},First(S’)={else,e} First(E)={b} Follow(S)=Follow(S’)={else,#} Follow(E)={then} 第三步:根据定理判定文法是不是LL(1)文法 因为:1)First(if E then S S’) ∩First(other)=Φ First(else S) ∩First(e)= Φ 但 2)First(else S) ∩ Follow(S’)={else}不为空集 故此文法不是LL(1)文法 i + * ( ) # E E TE’ E TE’ E’ E’ +TE’ E’ e E’ e T T FT’ T FT’ T’ T’ e T’ *FT’ T’ e T’ e F F i F (E) 判断一个文法是否是LL(1)文法的方法二 六、LL(1)分析法 LL:第一个L表示从左到右扫描输入串, 第二个L表示最左推导 (1):表示分析时每一步只需向前查看一个符号 2.LL(1)文法的条件 1.LL(1)文法 一个文法G,若它的分析表M不含多重定义入口,则称它是 一个LL(1)文法。 (1)FIRST(α)∩ FIRST(β) = φ (2)若β ε,则 FIRST(α)∩ FOLLOW(A)=Φ 文法G是LL(1)的,则对于G的每一个非终结符A的任何两个不同产生式 A - α| β,有: 使用LL(1)文法,一定可以实现不带回溯的自上而下分析; ① 对 A- α | β,若条件(1)不成立, 则 FIRST(α)∩ FIRST(β

文档评论(0)

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

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

1亿VIP精品文档

相关文档