- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
---- 语义分析之二 第 7 章 中间代码及其翻译 7.1 常用的中间代码形式示例 7.2 各种语法成分的中间代码设计 7.3 中间代码翻译算法 7.4 中间代码翻译的实现 中间代码是高级程序语言中,各种语法成分的语义结构表示;它介于源语言和目标语言之间。 中间代码设置的目的是便于编译的后期处理(如优化和目标生成)。 源语言 目标语言 两小步 一大步 内容提要 中间代码 7.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 各种语法成分的中间代码设计 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*= 7.2.2 四元式 Ⅰ. 表达式的四元式设计: 设 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) 算符,对象1,对象2,结果 quat(E2) ※ 表达式四元式翻译示例: 【例7.3】 a+b*(c-d) = quat(a), quat( a+b*(c-d)) ∵ quat(b*(c-d)), q(+ res(a) res(b*(c-d)) t ) 空 quat(b), quat((c-d)), q(* res(b) res(c-d) t ) 空 q(- c d t1), q(* q(+ ⑴(- c d t1 ) ⑵(* b t1 t2 ) ⑶(+ a t2 t3 ) ※ 按最终结果的生成顺序,可得: ⑴ ⑵ ⑶ t1 t2), a t2 t3). b ※ 表达式逆波兰式和四元式最简 翻译算法示例: 【例7.4】 (a+b/d)e*(f-g), pos()?, Qu
文档评论(0)