辽宁大学编译原理课件part5xia.ppt

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

第5章 自底向上的 语法分析 自顶向下(Top Down)的分析 推导(Derivation) 自底向上(Bottom Up)的分析 归约(Reduce) 5.1 自底向上分析 思想 从输入串出发,反复利用产生式进行归约,如果最后能得到文法的开始符号,则输入串是句子,否则输入串有语法错误 核心 寻找句型中的当前归约对象——“句柄”进行归约,用不同的方法寻找句柄,就可获得不同的分析方法 一个简单的归约过程 例 设文法为: S→aAcBe A→Ab|b B→d 回忆几个概念 最左推导(Left-most Derivation) 每次推导都施加在句型的 最左边的语法变量上 ——与最右归约对应 最右推导(Right-most Derivation) 每次推导都施加在句型的最右边的语法变量上——与最左归约(规范归约)对应,得规范句型/右句型 回忆几个概念 如果S?* αAβ and A?+γ,则称γ是句型αγβ的相对于变量A的短语(Phrase) 如果S?* αAβ and A?γ,则称γ是句型αγβ的相对于变量A的直接(简单)短语 最左直接短语叫做句柄(Handle) 回忆几个概念 规范归约(另一表达):设α为文法 G 的句子,如果 1) α=αn?αn-1?…?α2?α1=S 2)对每个i(1i≤n),αi-1是将句型αi中的句柄归约后得到的句型 则称序列 αn,...,α1为α的规范归约序列—由规范归约组成 语法分析树的生成再演示 a b b c d e 分析过程再演示 abbcde# 《编译原理》 (Principles of Compiling) 上次课主要内容 预测分析表(LL(1)分析表)构造算法 ? a ∈FIRST(α), M[A,a]= A→α; ifε∈FIRST(α) then ? b∈FOLLOW(A) ∪{#} ,M[A,b]=A→α; if M[A,b] 无定义,then M[A,b]=error 上次课主要内容 语法图 根据理解的方便性,标记的语法符号可以看成状态或者边,表示处理程序对应该语法符号需完成的工作 递归子程序法 对应每一个语法变量,设计一个递归子程序,完成对此语法变量(对应的语法成分)的分析 上次课主要内容 自底向上的分析 实现对输入token序列的归约 一个输入缓冲区 一个分析栈 被归约的对象在栈顶形成 知道当前待归约对象是否在栈顶形成 当前待归约对象的长度 栈+输入缓冲区剩余= #当前“句型”# 且不含当前句型的句柄后的任何符号 abbcde# 分析设想——移进归约 系统框架 控制程序 控制分析过程,输出分析结果——产生式序列 输入缓冲区 保存输入符号(token)串 栈 保存语法符号——已经处理的部分结果(前缀) 栈+输入缓冲区剩余内容= #当前“句型”# 栈中不含当前句型的句柄后的任何符号 分析设想——分析器结构 分析设想——移进归约 系统运行 开始格局 栈:#;输入缓冲区:w# 栈 存放已经分析出来的结果和读入的符号,一旦句柄在栈顶形成,就将其弹出进行归约,并将结果压入栈 正常结束: 栈中为 #S,输入缓冲区只剩 # ??系统如何发现句柄已经在栈顶形成 例5-1体验id1+id2*id3的分析过程 E → id 分析器的四种动作 1) 移进:将下一输入符号移入栈 2) 归约:用产生式左侧的非终结符替换栈顶的句柄(某产生式右部) 3) 接受:分析成功 4) 出错:出错处理 ??回头看——决定移进和归约的依据是什么 移进归约分析中的问题 1) 移进归约冲突 移进归约分析中的问题 2) 归约归约冲突 存在两个可用的产生式 aAbcde 中 A→Ab 和 A→Ab 各种分析方法处理冲突的方法不同 3)如何识别句柄? 如何保证找到的归约对象是最左的? 利用栈 如何确定句柄的开始处与结束处? 优先法 根据归约的先后次序为句型中相邻的文法符号规定优先关系 句柄内相邻符号同时归约,是同优先级的 句柄两个端点符号的优先级要高于句柄外与之相邻的符号的优先级,句柄内相邻符号具有相同的优先级 a1…ai-1≮ai≡ai+1≡…≡aj-1≡aj≯aj+1…an 状态法 句柄是否形成,要看某个产生式的右部是否形成 例如: S→bBB的识别 S→.bBB 移进b S→b.BB 等待归约出B S→bB.B 等待归约出B S→bBB. 已经形成,进行归约 核心:根据句柄的形成过程建立状态 用状态来描述不同时刻句柄是否形成 因为句柄是产生式的右部,可用“产生式”来刻画句柄的不同识别状态 5.2 算符优先分析法 算术表达式分析的启示 算符优先关系的直观意义 + ≮ * + 的优先级低于 * ( ≡ )

文档评论(0)

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

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

1亿VIP精品文档

相关文档