网站大量收购独家精品文档,联系QQ:2885784924

编译原理第七章 中间语言(1).ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 7 章 中间代码及其翻译 7.1 常用的中间代码形式示例 7.2 各种语法成分的中间代码设计 7.3 中间代码翻译算法 7.4 中间代码翻译的实现 7.1 常用的中间代码形式 7.2 各种语法成分的中间代码设计 ※ 表达式逆波兰式翻译示例: 7.2.2 四元式 ※ 表达式四元式翻译示例: ※ 表达式逆波兰式和四元式最简 翻译算法示例: 语句标号为转向语句提供转入语句标识,二者用标号相关联。 ※ 条件语句四元式翻译示例: ※ 循环语句四元式翻译示例: ※ 逆波兰式(四元式)计算过程示例: 练习题: 【习题7.1】解释下列词语: 中间代码;常见的几种中间代码形式; 【习题7.2】指出下述语法成分的四元式结构设计: 条件语句;while循环语句; 【习题7.3】写出 的四元式序列: (1) if(x0)x=(a-b/2)*c; (2) while (a∨b) b=2*a/5; (3) a1:y=2*x-6;…;goto a1; ※ SLR(1)分析表设计示例1: 谢谢收看! * * ---- 语义分析之二 中间代码是高级程序语言中,各种语法成分的语义结构表示;它介于源语言和目标语言之间。 中间代码设置的目的是便于编译的后期处理(如优化和目标生成)。 源语言 目标语言 两小步 一大步 内容提要 中间代码 ※ 设有 赋值语句:x=a*b+c 则: ⑴ 逆波兰式: xab*c+= ⑵ 四元式: ⑴ ( * a b t1 ) ⑵ ( + t1 c t2 ) ⑶ ( = t2 _ x ) ⑶ 三元式: ① ( * a b ) ② ( + ① c ) ③ ( = ② x ) ⑷ 语义树: = x + * c a b ※ 简单比较之,各有所长: 逆波兰式 简单 ;四元式 清楚 ; 三元式 节省 ;语义树 直观 。 或 ⑴ t1=a*b ⑵ t2=t1+c ⑶ x=t2 7.2.1 逆波兰式 逆波兰式是一位波兰学者发明的,最初用于表达式的语义表式;基本形式如: 源表达式 逆波兰式 a + b = Ⅰ. 表达式的逆波兰式设计 设 pos(E) 为表达式 E 的逆波兰式; 其中:ω(运算符), i运算对象(变量或常量) ① pos(E1ωE2)=pos(E1)pos(E2)ω ② pos((E))=pos(E) ③ pos(i)=i ⑴ 方框内的三个定义式 ,为逆兰式翻译法则; ⑵ 定义式中的ω为 E1ωE2 中最后运算的算符! 则: 【注】 a b + 【例7.1】 x*(a+b/d)(-e+5) , pos( ) ? = x ∵ pos(x*(a+b/d)(-e+5)) = pos(x*(a+b/d)) = x - = x a ∴ pos( )= xabd/+*e 5+ = x a bd/ + * - 【注】 单目运算的逆波兰式: pos(-e)= e - 为便于与双目运算符相区别,这里用 代之。 - pos(-e+5) * pos(-e+5) + * 5 + pos((a+b/d))* a pos(b/d)+ bd/ pos(-e)5 + e pos((-e+5)) ⑵ 赋值语句的逆波兰式 Ⅱ. 其他语法成分的逆波兰式设计示例: 【定义】 v = E = v pos(E) = ⑴ 单目运算“-”的逆波兰式 改写单目算符 “-” =“ - ” 【定义】 pos(-E)= pos(E) - 或 0 pos(E) - 例7.2 x=(a+b)/-e*5 , ∵ pos(x=(a+b)/-e*5 ) = x pos( (a+b)/-e*5 ) = = x pos( (a+b)/-e) pos(5) * = x pos( (a+b)) pos(-e) / 5 * = = pos( ) ? = x ab+ e / 5 * = - ∴ pos()= - xab+e /5*= Ⅰ. 表达式的四元式设计: 设 quat(E),res(E) ⑴ 方框内的三个定义式 ,为四元式翻译法则; ⑵ 定义式中的ω为 E1ωE2 中最后运算的算符! 则: 【注】 其中:ω(运算符); i运算对象(变量或常数) ② quat((E))= quat(E) ③ quat(i)= 空 , res(i)= i q:(ω res(E1) res(E2) ti ) ※ 基本形式 q:(ω o1 o2 t ) 分别为表达式E的四元式和结果变量。 ① quat(E1ωE2)= quat(E1) 算符

文档评论(0)

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

文档来源于网络

1亿VIP精品文档

相关文档