编译原理课件第5章.ppt

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

第5章?自底向上的语法分析 5.1 自底向上的语法分析概述 5.2 算符优先分析法 5.3 LR分析法 5.4 语法分析程序的自动生成工具Yacc 5.5 本章小结 5.1 自底向上的语法分析概述 思想 从输入串出发,反复利用产生式进行归约,如果最后能得到文法的开始符号,则输入串是句子,否则输入串有语法错误。 核心 寻找句型中的当前归约对象——“句柄”进行归约,用不同的方法寻找句柄,就可获得不同的分析方法 例5.1 一个简单的归约过程 设文法G为: S→aABe A→Abc|b B→d 语法分析树的生成演示 a b b c d e 5.1.1 移进-归约分析 系统框架 采用表驱动的方式实现 输入缓冲区:保存输入符号串 分析栈:保存语法符号—已经得到的那部分分析结果 控制程序:控制分析过程,输出分析结果——产生式序列 格局:栈+输入缓冲区剩余内容=“句型” 移进-归约语法分析器的总体结构 与LL(1)的体系结构比较 移进-归约分析的工作过程 系统运行 开始格局 栈:#;输入缓冲区:w# 存放已经分析出来的结果,并将读入的符号送入栈,一旦句柄在栈顶形成,就将其弹出进行归约,并将结果压入栈 问题:系统如何发现句柄在栈顶形成? 正常结束: 栈中为 #S,输入缓冲区只有 # 输出结果表示: 用产生式序列表示语法分析树 E → id 分析器的四种动作 1) 移进:将下一输入符号移入栈 2) 归约:用产生式左侧的非终结符替换栈顶的句柄(某产生式右部) 3) 接受:分析成功 4) 出错:出错处理 ??决定移进和归约的依据是什么—回头看是否可以找到答案 移进-归约分析中的问题 1) 移进归约冲突 例5.2中的 6)可以移进 * 或按产生式E→E+E归约 移进-归约分析中的问题 1) 移进归约冲突 例5.2中的 6)可以移进 * 或按产生式E→E+E归约 2) 归约归约冲突 存在两个可用的产生式 各种分析方法处理冲突的方法不同 如何识别句柄? 如何保证找到的直接短语是最左的?利用栈 如何确定句柄的开始处与结束处? 5.1.2 优先法 根据归约的先后次序为句型中相邻的文法符号规定优先关系 句柄内相邻符号同时归约,是同优先的 句柄两端符号的优先级要高于句柄外与之相邻的符号 a1…ai-1≮ai≡ai+1≡…≡aj-1≡aj≯aj+1…an 定义了这种优先关系之后,语法分析程序就可以通过ai-1≮ai和aj≯aj+1这两个关系来确定句柄的头和尾了 5.1.3 状态法 根据句柄的识别状态(句柄是逐步形成的) 用状态来描述不同时刻下形成的那部分句柄 因为句柄是产生式的右部,可用产生式来表示句柄的不同识别状态 例如: 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=( V,T,P,S)中不存在形如 A→αBCβ 的产生式,则称之为算符文法(OG —Operator Grammar) 即:如果文法 G 中不存在具有相邻非终结符的产生式,则称为算符文法。 每个产生式的右部都没有两个语法变量直接相邻。 该文法不会产生如下形式的句型: …E1E2… 其中,E1和E2是两个相邻的语法变量。 5.2.1 算符优先文法 定义5.1 假设G是一个不含ε-产生式的文法,A、B和C均是G的语法变量,G的任何一对终结符a和b之间的优先关系定义为: ⑴ a≡b,当且仅当文法G中含有形如A→…ab…或A→…aBb…的产生式; ⑵ a≮b,当且仅当文法G中含有形如A→…aB…的产生式,而且Bb…或BCb…; ⑶ a≯b,当且仅当文法G中含有形如A→…Bb…的产生式,而且B…a或B…aC; ⑷ a与b无关系,当且仅当a与b在G的任何句型中都不相邻。 问题:什么是算符优先文法? 5.2.1 算符优先文法 设G=(V,T,P,S)为OG,如果? a,b∈VT, a≡b, a≮b, a≯b 至多有一个成立,则称之为算符优先文法(OP

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档