编译原理第4章-自顶向下语法分析.pptx

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

; 基本思想;基本思想; 从文法开始符号出发进行推导;每一步推导 都获得文法的一个句型;直到产生出一个句 子,恰好是所期望的终结符串 每一步推导是对当前句型中剩余的某个非终 结符进行扩展,即用该非终结符的一个产生 式的右部替换该非终结符 如果不存在任何一个可以产生出所期望的终 结符串的推导,则表明存在语法错误; 自顶向下分析举例; 两类非确定性 在每一步推导中,选择对哪一个非终结符、 哪一个产生式都可能是非确定的 分析成功的结果:得到一个推导; 举例; 仅有产生式选择是非确定的 在每一步推导中,总是对最左边的非终结符 进行替换,但选择哪一个产生式是非确定的 分析成功的结果:得到一个最左推导 原理:每个合法的句子都存在至少一个起始 于开始符号的最左推导;一个终结符串,只 要存在一个起始于开始符号的最左推导,它 就是一个合法的句子 从左向右扫描输入单词,失败条件较简单; 改进的方法举例; 非终结符选择和产生式选择都是确定的 在每一步推导中,总是对最左边的非终结符 进行展开,且选择哪一个产生式是确定的, 因此是一种无回溯的方法 从左向右扫描,可能向前查看(lookahead) 确定数目的单词 分析成功的结果:得到唯一的最左推导 分析条件:对文法需要有一定的限制; 举例(向前查看 2 个单词); 左递归带来的问题; 要求文法不含左递归; 左公因子带来的问题; 通常要求文法不含左公因子; 应用较普遍的自顶向下预测分析是 LL(1)分析; 第一个“L”, 代表从左(Left)向右扫描单词 第二个“L”,代表产生的是最左(Leftmost) 推导 “1”代表向前查看(lookahead)一个单词; 要求文法是LL(1)的 什么是LL(1)文法? 先引入两个重要概念; First 集合 Follow 集合; 定义 设 G =(VT,VN,P,S)是上下文无关文法 对 ? ?(VT ?VN)*, First(?)= { a?? ?* a?, a ?VT, ? ?(VT ?VN)*, 或者 ? ?*ε时 a =ε} 或者 First(?)= { a?? lm?* a?, a ?VT, ? ?(VT ?VN)*, 或者 ? lm?*ε时 a =ε}; 计算 First 集合; 例:计算 First 集合; 例:计算 First 集合( 续); 例:计算 First 集合( 续); 例:计算 First 集合( 续); 例:计算 First 集合( 续); 例:计算 First 集合( 续); 定义 设 G =(VT,VN,P,S)是上下文无关文法,对 每个 A?VN, Follow(A) = { a ? S# ?* ?A?# 且 a?First(?#), ?, ? ? (VT ?VN)* } (# 代表输入单词序列右边的结束符); 计算 Follow 集合; 例:计算 First 和 Follow 集合; 例:计算 First 和 Follow 集合; 例:计算 First 和 Follow 集合; 例:计算 First 和 Follow 集合; 例:计算 First 和 Follow 集合; 例:计算 First 和 Follow 集合; 定义: 预测集合(Predictive Set) ; 定义: LL(1)文法;; 递归下降 LL(1)分析程序 每个非终结符对应一个分析子程序; 工作原理 每个非终结符都对应一个子程序。该子程序 的行为根据语法描述来明确:根据下一个输 入符号来确定按照哪一个产生式进行处理, 再根据该产生式的右端, 每遇到一个终结符,则判断当前读入的单词是否 与该终结符相匹配,若匹配,再读取下一个单词 继续分析;不匹配,则进行出错处理 每遇到一个非终结符,则调用相应的子程序; 例 对于下列关于 function 的唯一产生式 function ? FUNC ID ( parameter_list ) statement (function,parameter_list,和 statement 是非终结符); 例 续上页; 例 对于下列文法 G(S)

文档评论(0)

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

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

1亿VIP精品文档

相关文档