- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北方工业大学编译原理教案.ppt
第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 分析设想——移进归约 系统框架 控制程序 控制分析过程,输出分析结果——产生式序列 输入缓冲区 保存输入符号串 栈 保存语法符号——已经得到的部分结果 栈+输入缓冲区剩余内容=“句型” 分析器结构 分析设想——移进归约 系统运行 开始格局 栈:#;输入缓冲区:w# 栈 存放已经分析出来的结果和读入的符号,一旦句柄在栈顶形成,就将其弹出进行归约,并将结果压入栈 正常结束: 栈中为 #S,输入缓冲区只有 # ??系统如何发现句柄在栈顶形成 例5-1体验id1+id2*id3的分析过程 E →id 分析器的四种动作 1) 移进:将下一输入符号移入栈 2) 归约:用产生式左侧的非终结符替换栈顶的句柄(某产生式右部) 3) 接受:分析成功 4) 出错:出错处理 ??决定移进和归约的依据是什么—回头看是否可以找到答案 移进归约分析中的问题 1) 移进归约冲突 移进归约分析中的问题 2) 归约归约冲突 存在两个可用的产生式 各种分析方法处理冲突的方法不同 如何识别句柄? 如何保证找到的直接短语是最左的?利用栈 如何确定句柄的开始处与结束处? 优先法 根据归约的先后次序为句型中相邻的文法符号规定优先关系 句柄内相邻符号同时归约,是同优先级的 句柄两个端点符号的优先级要高于句柄外与之相邻的符号的优先级,句柄内相邻符号具有相同的优先级 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 算符优先分析法 算术表达式分析的启示 算符优先关系的直观意义 + ≮ * + 的优先级低于 * ( ≡ ) ( 的优先级等于 ) + ≯ + + 的优先级高于 + 方法 将句型中的终结符号当作“算符”,借助于算符之间的优先关系确定句柄 算术表达式文法的再分析 E→E+E E→E-E E→E*E E→E/E E→(E) E→id E→E+T| E-T| T T→T*F| T/F| F F→(E)|id 算符文法 如果文法G=( VN,VT,P,S)中不存在形如 A→αBCβ 的产生式,则称之为算符文法(OG —Operator Grammar) 即:如果文法 G 中不存在具有相邻非终结符的产生式,则称为算符文法 算符间的优先关系 设G=(VN,VT,P,S)为OG,则定义 a≡b ? A→…ab…∈P或者 A→…aBb…∈P a≮b ? A→…aB…∈P且(B?+b…或者B?+Cb…) a≯b ? A→…Bb…∈P且(B?+…a或者B?+…aC) 什么是算符优先文法? 算符优先文法 设G=(V,T,P,S)为OG,如果? a,b∈VT, a≡b,a≮b,a≯b 至多有一个成立,则称之为算符优先文法(OPG —Operator Precedence Grammar) ——在无ε产生式的算
文档评论(0)