第07讲-语法分析-II.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
温故而知新A ???1 | ??2正规式左因子消除左因子功能有限A?+Aa 上下文无关文法左递归消除左递归图形化表示四元组定义推导分析树最左推导最右推导二义性消除二义性本讲纲要语法分析方法自上而下分析FIRST集和FOLLOW集语法分析?给定一个句子id+id*id语法分析的目标分析句子的语法结构,确定该句子是否符合表达式文法怎么做?分析的途径自上而下自下而上E????id+id*id为该句子建立以文法的开始符号E为根的语法树本讲纲要语法分析方法自上而下分析FIRST集和FOLLOW集自上而下分析自上而下分析方法从根部开始构建语法树存在的问题文法存在左递归怎么办?自上而下分析中的问题E+EE+EE无限递归下去,没有尽头…+EE…E=E+E=E+E+E=E+E+E+E=…自上而下分析中的问题自上而下分析方法从根部开始构建语法树存在的问题文法存在左递归怎么办?文法中一步推导可能存在多个产生式选择时,怎么办?自上而下分析中的问题SSaCbCb一步推导有多个产生式可供选择adc复杂的回溯技术、回溯导致语义工作推倒重来、难以报告出错的确切位置、效率低SCbac例: 文法S ? aCb C ? cd | c为输入串w = acb建立分析树如何避免问题如果要用自上而下的方法进行分析,就必须避免例子中出现的问题每一步推导,不能因为左递归的存在而使得推导过程陷入死循环每一步推导,可以选择的产生式必须是唯一的消除左递归文法中存在左递归时,为了采用自上而下的分析方法,必须采取方法消除左递归3.2.6 消除左递归文法左递归 A?+Aa 直接左递归 A?Aa |b 串的特点ba . . . a消除直接左递归 A ? b A? A?? a A? | ? 3.2.6 消除左递归例 算术表达文法 E ? E + T | T ( T + T . . . + T ) T ? T * F | F ( F * F . . . * F ) F ? ( E ) | id消除左递归后文法 E ? TE ? E ? ? + TE ? | ? T ? FT ? T ? ? * F T ? | ? F ? ( E ) | idid + id * id的最左推导再现1, E ? TE ?2, T ? FT ? 3, F ? id4, T ? ? ?5, E ? ? + TE ? 6, T ? FT ? 7, F ? id8, T ? ? * F T ? 9, F ? id10, T ? ? ?11, E ? ? ?最左推导与语法树的生成ETE ?T ?E ?+TFεT ?idεFid E ? TE ? E ? ? + TE ? | ? T ? FT ? T ? ? * F T ? | ? F ? ( E ) | idT ?*Fεid3.2.6 消除左递归非直接左递归 S ? Aa | b A ? Sd | ?先变换成直接左递归 S ? Aa | b A ? Aad | bd | ? 再消除左递归 S ? Aa | b A ? bd A? | A? A? ? adA? | ?例: 间接左递归的消除S→Ac|c A→Bb|b B→Sa|a将B的定义代入A产生式得: A→Sab|ab|b将A的定义代入S产生式得: S→Sabc|abc|bc|c消除直接左递归: S→abcS’|bcS’|cS’ S’→abcS’|ε删除“多余的”产生式:A→Sab|ab|b和B→Sa|a 结果: S→abcS’|bcS’|cS’ S’→abcS’|ε消除左递归的一般方法对产生式组A→Aa1|Aa2|…|Aan| b1 | b2 |…| bm 用如下产生式组替换A → b1B | b2B |…| bmBB → a1B| a2B |…|anB |ε其中:B为新变量,相当于A’消除左递归的算法为非终结符编号,再采用代入法将间接左递归变为直接左递归,消除直接左递归提取左因子例:if语句的原始文法S→ if E then S | if E then S else S | other遇到 if 时难以判断用哪一个产生式进行匹配(推导)存在左因子 if E then S提取左因子S-aCbC-cC’C’-d| ?当存在某一步推导可能有多种选择的产生式的时候,可通过提取左因子的方法修改文法文法 S ? aCb C ? cd | c可以将文法改写为提取左因子有左因子的文法 A ???1 | ??2提左因子 A ? ? A? A? ? ?1 | ?2 提取左因子例 悬空else的文法 stmt ? if expr then stmt else stmt | if expr then stmt | other提左因子stmt ? if expr then stmt optional_else_part

文档评论(0)

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

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

1亿VIP精品文档

相关文档