第四章 自顶向下语法分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 自顶向下的语法分析 主 要 内 容 ●两种分析方法: ●LL(1) (预测分析法)方法 ●递归子程序方法 ●两个主要问题: ●回溯问题。 ●LL(1)分析过程。 §1. 语法分析的功能目标与分析方法 一、语法分析的功能目标 1. 语法分析的目标 对词法分析的输出结果――单词序列进行 分析,检查合法的语法单位(句子)。 注:语法分析是对源程序的句子进行检查,而不是识别单词。(句子:表达式,语句等) 2. 语法分析的功能 在词法分析的基础上,根据语法分析规则(文法)识别一个个的单词串,构造一个与输入串相匹配的语法树。 例:词法分析结果: 二、语法分析方法 按照识别句子时语法树建立方式,语法分 析分为两大类技术: 自顶向下分析技术(推导技术) 自底向上分析技术(归约技术) 1. 自顶向下分析技术 从给定的文法识别符号出发,根据文法的产生式正向推导出给定的句子。从语法树的角度看,自顶向下分析过程是以识别符号为根结点,试图向下构造一棵语法树,使其末端结点符号串正好与输入符号串相同。 自顶向下的分析分为两种方法: 递归子程序法(递归下降分析法) LL(1)分析法(预测分析法) 2. 自底向上分析技术 从给定的输入的单词串(句子)出发,根据文法产生式逐步进行归约,试图归约到文法的识别符号为止。从语法树的角度看,自底向上分析的过程是以输入符号串作为末端的结点符号串,向着根结点的方向向上构造语法树,使识别符号正好是树的根结点。 自底向上的分析分为: 简单优先分析法 算符优先分析法 LR(K)分析法(适合于自动生成) §2. 自顶向下语法分析 自顶向下语法分析分为: 确定的自顶向下分析分析法(不带回溯分析法) 不确定的自顶向下分析分析法(带回溯分析法) 一、确定的自顶向下分析过程 基本思想:从文法的识别符号出发,根据当前的输入符号(单词符号)唯一地确定选用哪个产生式替换相应非终结符往下推导的过程。(或构造相应的语法树) 例:设有文法G1[S]: (1) S::=pA (2) S::=qB (3) A::=cAd (4) A::=a 若输入的句子w=pccadd 自顶向下的推导过程为: 相应推导的语法树: 文法的特点: 无空产生式,且文法为上下文无关文法; 每个产生式都由终结符号开始,且左部相同的产生式,它们的右部的开始的终结符号不相同。 推导的特点: 自文法的识别符号开始进行推导。 根据输入的符号,能够唯一选择哪个产生式往下推导(无回溯)。因此分析中的推导过程是唯一确定的。 二、分析过程中的回溯问题 例:设有文法G[S]: S::=xAy A::=ab|a 设当前输入的合法句子w=xay,则可能的推导树: 产生推导回溯的原因:左部相同的产生式,其右部 有相同的开始终结符。 例:若含有空产生式的文法G[A]: (1)A::=Bx (2)B::=x|ε 若输入句子w=x 推导: 不匹配必须回溯: 匹配成功。 尽管文法含有:相同左部的产生式,其右部没有相同的开始终结符。但是含有空产生式,使得推导有两条路线:一个由B::=x,首符号为x;一个由B::= ε及B的后继符号也是x供选择而产生回溯。 例如:有文法G[S]: (1) S::=Sa (2) S::=b 左递归文法使推导产生回溯,同时也会使推导产生无限循环的情况(间接左递归也是一样)。 问题: ①到底怎样的文法才能使推导无回溯即为确定的呢?――-引出了LL(1)文法的定义。 ②怎样去判断使推导是确定的文法――判断LL(1)文法。 ③若判断是使推导不确定的文法,如何去改造该文法,使推导是确定的?――非LL(1)文法到LL(1)文法的改造。 §3. LL(1)文法 一、FIRST(A)和FOLLOW(A)集合的定义与构造 问题:为了解决推导过程无回溯: (1) 文法中,相同左部产生式,其右部的头终结符应该不同――FIRST(A) (2) 文法中,有空产生式A::= ε时,还应该看A的尾符号――FOLLOW(A) 1. FIRST(A)集合的定义与构造 (1) FIRST(A)的定义 设G[S]=( VT,VN,P,S)是上下文无关文法,符号串推导的头符号集合: FIRST(A)={a|A=*a…,a∈VT} 特别:若A=*ε,则规定ε∈FIRST(A) 显然,文法中相同左部的产生式,其右部的头符号应该不同,即: FIRST(Ai)∩FIRST(Aj)=Φ (i≠j,ε∈FIRST(Aj)) 例:文法G

文档评论(0)

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

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

1亿VIP精品文档

相关文档