实用自上而下语法分析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实用自上而下语法分析

第四章 自上向下语法分析 语法分析的任务 本章要点: 自上而下语法分析的思想 LL(1)方法 递归下降分析 预测分析 基本思想 主旨 对任何输入串,试图用一切可能,从文法的开始符号出发,自上而下地为输入串建立一棵语法树,或者为输入串寻找一个最左推导。 本质上是一种试探过程 要解决的基本问题 例:G[S]:S→xAy A→** | * 考虑输入串x*y 对于特定的非终结符号,使用哪个产生式来替换? 带回溯的自上而下语法分析 存在的困难和缺点 文法的递归性 虚假匹配 错误的位置难以确定 效率低,代价高 无回溯的自上向下分析技术 先决条件: 无左递归 既没有直接左递归,也没有间接左递归。 无回溯性 对于任一非终结符号U的产生式右部x1|x2|…|xn,各xi的首终结符号两两不相交。 文法的左递归性 定义: 文法的左递归性是指文法具有以下形式的直接左递归: U →Ux|y 或间接左递归: U=+Ux 具有左递归性的文法举例 E → E+T|T T → T*F|F F →(E)|i 消除文法的直接左递归 P→Pα1 | … | Pαn | β1 | … | βm 改写为: P → β1P′| … | βmP′ P′ → α1P′| … | αnP′| ε 例子 消除左递归前 E→E+T|T T→T*F|F F→(E)|i 间接左递归举例 S→Qc|c Q→Rb|b R→Sa|a 以上文法不含直接左递归,但S,Q,R都是左递归的,因为: S=Qc =Rbc =Sabc Q =Rb =Sab =Qabc R =Sa =Qca =Rbca 消除文法的左递归 前提:如果一个文法不含回路(形如P?+ P的推导),也不含以ε 为右部的产生式,那么可以通过执行消除文法左递归的算法消除文法的一切左递归(改写后的文法可能含有以ε 为右部的产生式)。 消除文法的一切左递归的算法 1、把文法的所有非终结符按任一顺序排序 2、FOR i=1 TO n DO (1) FOR j=1 TO i-1 DO 把形如Pi→Pjγ的规则改写成 Pi→δ1γ| … | δkγ 其中Pj→δ1| …|δk是关于Pj的所有规则 (2)消除关于规则的直接左递归 3、化简由2所得的文法 例子 A→Bcd B→Ce|f C→Ab|c 消除回溯的基本思想 必须保证对文法的任何非终结符,当要它去匹配输入串时,能够根据它所面临的输入符号,指派它的一个候选(右部)去执行任务,并且此候选的工作结果应是确定无疑的:即要么匹配成功,要么不可能获得匹配。 消除回溯对文法的要求 1、首先,文法不得含有左递归; 2、设文法G不含左递归,对G的所有非终结符的每个候选α 定义其终结首符集FIRST(α) 为 FIRST(α)={a|α = *a…,a∈VT } 特别是,若α = *ε,则规定ε∈ FIRST(α) 。如果非终结符A的所有候选首符集两两不相交,那么,当要求A匹配输入串时,A就能根据它所面临的第一个输入符号a,准确地指派某一个候选去执行任务。这个候选就是那个终结首符集含a的α。 消除回溯方法:提取公共左因子 假设关于A的产生式是 A→δβ1| δβ2| …| δβn| γβn+1 那么,可以将其改写为 A→ δA ′ | γβn+1 A’→ β1| β2| …| βn 经过反复提取左因子,就能够把每个非终结符(包括新引进者)的多有候选首符集变成为两两不相交。 代价:引入大量新的非终结符和空产生式。 G[S]:S →Bx B →x | ε 考虑输入串x FOLLOW(U)={b|S = *xUby, b∈VT , x,y ∈(VN∪VT)* };特别地,# ?FOLLOW(S)。 LL(1)分析条件 文法不含左递归 设U是文法G的任一个非终结符,其产生式为 U→x1|x2|…|xn 如果 FIRST(xi)∩FIRST(xj) =Ф (i≠j, i,j=1,2,…,n) 当ε∈ FIRST(xi) 时,有 FIRST(xi) ∩ FOLLOW(U) =Ф 则文法G为LL(1)文法。 LL(1)方法 基本思想:从S出发,生成句子的最左推导。 选择合适产生式:从左到右扫描源程序,每次通过向前查看1个字符,选择合适的

文档评论(0)

nantong + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档