- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原快理chapter7
第七章 翻译成中间代码Translation to Intermediate Code 计算机科学与技术学院 刘 慧 Translate:转换为某人的母语或另一种语言。 编译器的语义分析阶段必须将抽象语法转换成抽象机器代码(abstract machine code)。它可以在类型检查之后或在类型检查的同时做这项工作。 中间表示(Intermediate representation, IR):是一种抽象机器语言,它可以表示目标机的操作而不需太多地涉及机器相关的细节且独立于源语言的细节。 前端(front end):lexical analysis、parsing、semantic analysis,and translation to intermediate representation. 后端(back end):optimization of the intermediate representation and translation to machine language. 一个可移植的编译器:先将源语言转换成IR,然后再将IR转换成机器语言。这样便只需要N个前端和M个后端。 7.1 Intermediate Representation Trees 一种好的中间表示(IR)应具有以下一些特点: 便于在语义分析阶段生成它; 对于希望支持的所有目标机,它必须便于转变成真实的机器语言; 每一种结构必须具有简单而清晰的含义,以便能够较简单地指定和实现重写中间表示的各种优化变换(optimizing transformations)。 中间表示中的个体成分(individual components)应该只描述特别简单的事情:如单个取、存、加法、传递或转移等操作。 7.1 Intermediate Representation Trees 中间表示树中每一种操作符的含义: 7.1 Intermediate Representation Trees 7.1 Intermediate Representation Trees 7.1 Intermediate Representation Trees 7.1 Intermediate Representation Trees 7.2 Translation into Trees 7.2 Translation into Trees 7.2 Translation into Trees 7.2 Translation into Trees 7.2 Translation into Trees * * * 直接将抽象语法转换成真实的机器代码,尽管可以实现但不利于可移植性和模块化 N·M个编译器:编译N中不同的源语言,并为M台不同的目标机器生成代码。 Java ML Pascal C C++ Spare Alpha MIPS Pentium Java ML Pascal C C++ Spare Alpha MIPS Pentium IR 好的IR便于将任务模块化(modularize the task)。 T_exp Const (int); T_exp Name (Temp_label); T_exp Temp (Temp_temp); 表达式(T_exp)代表某个值的计算: CONST( i ):整型常数i ; NAME( n ):符号常数n ; TEMP( t ):临时变量t,抽象机器中的临时变量类似于真实机器中的寄存器,但可以有无限多个临时变量。 T_exp T_Binop(T_binOP, T_exp, T_exp); BINOP(o, e1, e2):对操作数e1 , e2 施加二元操作符o表示的操作。 其中T_binOp的定义如下: 整型算数操作符:PLUS、MINUS、MUL、DIV; 整型按位逻辑操作符:AND、OR、XOR; 整型逻辑移位操作符:LSFIFT、RSHIFT; 整型算数右移操作符:ARSHIFT。 T_exp T_Mem (T_exp); T_exp T_Call (T_exp, T_expList); T_exp T_Eseq (T_stm, T_exp); MEM(e):开始于存储地址e的wordSize个字节的内容。 当MEM作为MOVE操作的左子式时,它表示对存储地址e 的“存储”; 在其他位置都表示“读取”。 CALL(f ,l )过程调用:以参数表l 调用函数f ,子表达式f的计算先于参数的计算,参数的计算则从左到右。 ESEQ(s,e):先计算语句s 以形成其副作用,然后计算e作为此表达式的结果。 T_stm T_Move (T_exp, T_exp); T_stm T_Exp(T_exp); MOVE(TEMP t, e):
文档评论(0)