编译原理教案326p.ppt

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

1 W 栈 ) * d (b) ( + * a b c W 栈 * d (c) a b c * + W 栈 (e) a b c * + d * W 栈 (d) a b c *+d * 从而 ( a + b * c ) * d 的逆波兰表达式生成为 : a b c * + d * 或者为: 当前符号 ( a + b * c ) * d 输入区 输出区 W 栈 ( a + b * c ) * d a + b * c ) * d + b * c ) * d b * c ) * d * c ) * d c ) * d ) * d ) * d * d * d d ( ( (+ (+ (+* (+* (+ ( * * a a ab ab abc abc* abc*+ abc*+ abc*+ abc*+d abc*+d* 三、逆波兰表达式的处理 1、逆波兰表达式的处理算法 从左到右扫描逆波兰表达式: 凡是遇到运算分量,则运算分量入 ? 栈; 凡是遇到运算符,则把运算分量栈栈顶的两个或一个分量取出, 生成相应的目标指令,运算结果存放在“AC”中,把“AC”标志入?栈. 如上一直处理下去,直到整个逆波兰表达式处理完毕为止. 2、逆波兰表达式的处理具体过程 例如, 对于表达式 abc * + d * 对其具体处理过程如下: 当前符号 a b c * + d ? 栈 说明 目标指令 a ab abc a“AC” CLA b MPY c ADD a MPY d * “AC” “AC”d “AC” a入栈 b入栈 c入栈 d入栈 b*c AC @(AC)+a AC @(AC)*d AC 其生成的目标代码为: CLA b MPY c ADD a MPY d 四、运算符优先数法 1、运算符优先数法的算法步骤 规定:# 简单表达式 #, 并且把“#”的优先数视为 0 的运算符. 设立两个栈---- w 栈( 运算符号栈 ) 和 ? 栈( 运算分量栈 ). 运算符优先数法处理简单表达式的具体步骤为: 第一, 从左到右扫描表达式中的每个符号. 遇到运算分量,则运算分量入 ? 栈,继续本步. 遇到运算符就转第二步. 第二, 检查 w 栈内有无元素.若没有,则当前运算符入 w 栈, 转第一步,否则进行第三步. 第三, 检查运算符的优先数.若当前运算符的优先数比栈顶的运算 符优先数大,则当前运算符入 w 栈,转第一步,否则进第四步. 第四, 检查当前符号与 w 栈栈顶元素. 若当前符号是“)”,而栈顶元素是“(”,则“(”退 w 栈,转第一步; 若当前符号是“#”,而栈顶元素也是“#”,则分析结束; 若当前不为上述两种情形时,则进行第五步. 第五,根据 w 栈栈顶运算符的性质在 ? 栈栈顶取一个或两个分 量生成相应的目标指令. 运算结果存放在“AC”中,并把“AC” 标志入 ? 栈,同时退 ? 栈和 w 栈,再转第二步. 2、运算符优先数法的算法框图(见P137图6—17) 3、运算符优先数法的具体处理过程 例如, 对于表达式 # a+ b * c #. 其运算符优先数法的具体处理过程如下: 其生成的目标代码为: CLA b MPY c ADD a 当前符号 # a + b * c ? 栈 说明 目标指令 a a ab CLA b MPY c ADD a # ab abc a“AC” # 入w 栈 a 入? 栈 b*c AC *退w 栈 “AC” w 栈 # # #+ #+ #+* #+* #+ # + 入w 栈 b 入? 栈 *入w 栈 c 入? 栈 @(AC)+a AC +退w 栈 五、运算符的优先关系 1、程序中的符号归类 广义运算符:程序中包含一切属性字在内的运算符. 赋值号“:=”. begin-end. if-then-else. 分号“;”和逗号“,”. A[x1,x2,??? ,xn ]. P(x1,x2,??? ,xn ). (2) 广义运算分量:包含一切中间结果在内的运算分量. 2、运算符的优先关系 结论: ( 1) 运算符之间的优先关系由源语言的语法或语义规则所决定. ( 2) 运算符之间存在三种优先关系:、 、 =. ( 3)两个运算符之间的优先关系有时随它们出现的左右位置不同

文档评论(0)

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

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档