自上而下语法分析47.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文档。上传文档
查看更多
自上而下语法分析47

第五章 自上而下语法分析;语法分析是继词法分析之后编译过程的第2阶段。它的主要任务是对词法分析的输出结果——单词序列进行分析,识别合法的语法单位。 语法分析最常用的方法有:优先方法、递归下降法、LL方法和LR方法。 所谓自上而下分析是指从树的根结点开始,为给定的输入串构造一棵语法树。 本章中,我们通过讨论一个一般的非确定的自上而下分析器来讨论上下无关语言的自上而下分析器的设计。 ;5.1 非确定的下推自动机;下推自动机的非空移动: ;5.1.1 PDA形式定义;5.1.1 PDA形式定义;5.1.2 PDA的 构形和移动;5.1.2 PDA的 构形和移动;例5.1 考虑下表定义的两状态PDA,其的两个状态分别是p和Q,δ(p,a,Z)={(p1,h1),(p2,h2),…},输入符号是0和1,栈符号是R,B和G。该PDA识别由符号0和1组成的所有回文(Palindrome) 。;这个自动机是非确定的,因为在行3和行6包含了可供选择的移动;也因为无输入符号(如在行7)时照样可进行移动,而且此时存在相应的选择。该PDA的开始状态时p,初始栈内容时R。它停止于空栈。用该PDA识别输入串001100,其识别过程如下:;5.1.3 上下文无关语言与PDA ;5.1.3 上下文无关语言与PDA; 算法5.1 从CFG到NDPDA 给定 CFG G=(N,∑,P,S) 可以构造 一个相应的非确定的PDA M: M=(Q,∑′,H,δ,q0, Z0,F) 它只有一个状态q和下面的转换规则: ① 对P中每一个形如A→w的产生式,δ(q,ε,A)包含(q,w); ② 对每个a∈∑,δ(p,a,a)包含(q,ε) 且 Q={q} ∑′=∑ H=N∪∑ q0=q Z0=S F为终态集(可空)。 这个PDA停止于空栈。; 例5.2 考虑文法 S→0S1|c 该文法描述语言0*c1*,其中0的个数和1的个数相等。转换规则是: 1.δ(q,0,0)=(q,ε) 2.δ(q,1,1)=(q,ε) 3.δ(q,c,c)=(q,ε) 4.δ(q,ε,S)={(q,0S1) ,(q,c)}(其中ε可与任何合法输入符号匹配) 其中规则1、2、3根据前面的规则②构造,4根据规则① 构造。;使用例5.2分析句子;输入串,栈和句型;5.2 消除左递归方法 5.2.1 文法的左递归性;5.2.1 文法的左递归性;非确定的自顶向下分析存在的问题;回溯现象 侯选式:我们把文法中每个非终结符A的右部(可能有多个)称为A的侯选式。 当某非终结符对应多个侯选式时,如果其中有几个侯选式的右部左端第一个符号相同,那么就会使得语法分析程序无法根据当前的输入符号准确地决定选用哪个侯选式来替换A,只能采用试探的办法,任选某个侯选式去试探一次。如果不能导致最终地匹配,只得再换另一个侯选式去试探,这就造成了回溯现象。所以这种带回溯的自顶向下分析法,实际上是采用了一种穷尽一切可能选择的试探法。;回溯现象:在回溯之前,编译程序实际已经做了大量薄记工作,包括语义翻译工作在内。在回溯时,要清除这些内容,然后开始重新薄记,这就降低了分析效率。 左递归现象:回溯使语法分析器的动作不稳定,左递归会使分析程序进入到无穷的循环之中,这些问题都和描述语言的文法有直接关系。; 5.2.2 用扩展的BNF表示法消除左递归; 利用下面的两条规则,可把包含直接左递归的产生式转换成用扩展BNF表示法表示的产生式。 ① 提公因子 每当一条产生式中有公因子可提的时候,就把它提出来,若原产生式是 A→x|xy 则可写成 A→x(y|ε),这里把ε当作最后一个候选式。 ② 若 A→x|y|…|z|Av 是一组产生式,且它只有一个直接左递归的右部位于最后,则可把这组产生式变换成如下形式: A→(x|y|…|z){v} 也就是说,使用上述规则①,可把产生式改写成相对于某个非终结符而言,至多只含一个直接左递归的右部;然后,利用上述规则②消除这个直接左递归。 ; 5.2.3 直接改写文法 ;直接左递归更一般的形式 U→ Ux1?Ux2?…?Uxm?y1?y2?…?yn 其中,xi (i=1, 2, …, m) ? yi (i=1, 2, …, n), yj的头字符都不是U, xi 都不是?,则有 U→ y1U?? y2U??…?ynU? U? → x1U?? x2U??…?xmU??? ;消除左递归举例。 例如 :有文法: S→Sa 可改写为:S→bSˊ S→b Sˊ→aSˊ|ε 表达式文法: 消除左递归后:

文档评论(0)

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

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

1亿VIP精品文档

相关文档