代码的生成
author:一佰互联 2019-05-07   click:163
北京网站建设里包括了代码,代码生成是把语法、语义分析后的中间结果(中同语言)转换成等价的目标程序或目的程序摸块的过程。词法分析、语法分析和语义分析一起称为编译系统的前端.属于分析部分。代码生成和码优化一起称为编译系统的后端,属于综合部分。中间结果是用三元式、四元式或逆波兰式等中间语育表示的程序。目标程序是用目标语言书写的;可以是机器语言、汇编语言乃至高级语言,随着计算机编译环境积执行环境的不断完善,不仅能产生可直接执行的目标程序,也能生成可再定位或可连接的目标程序模块.并最终通过连接装入程序构成可直接执行的目标程序。代码生成不但与编译环境有关.而且与运行环境有关。所有生成的目标程序成当符合连接装入所要求的规范。代码生成中存储分配和寄存器分配是直接影响目标程序功效的重要且复杂的问题,应给予足够的重视。
 

运行时存储空间组织与管理是一个复杂而十分重要的问题,首先要了解一个过程(procedure)静态源程序和它的目标程序在运行时的活动之间的关系。一个过程的活动指的是该过程的一次执行。为了管理过程在一次执行中所需要的信息.使用一个连续的存储块,我们把这样的一个连续存储块称为活动记录。活动记录中记录临时单元、内情向量、局部变量、形式单元、静态链、动态链和返回地址。

存储分田策略有三种:静态分配、栈式动态分配和堆式动态分配。栈(stack)是一个特定的存储区,它的一端是固定的,另端是浮动的.对这个存储区.所有的信息存入也称为堆阵式堆栈。栈的概念在编译技术和其他软件技术中被广泛应用。堆(heap)是一个特定的存储区.其分配使用方法是先把它成若干个长度可变的子存储区,有些用干存入数据.有些供自由使用.当创建一片数据时.便需从自由公用区中选出一个足够大自由区,把该数据存人。当该数据不再箭用时,便释放相应的存区.这佯的存储分配方式称为堆式分配。堆式分配适用干理序运中长度可变的数据.如USP语育中的表等.

代玛生成时,帝首先考虑奸相应干每个镣程序或中间捏序的句的目标程序结构,然后一对多地转换过去。其中还可能有些地事先不知道,可先待定,记下位置,拉上蛙,以后知泪了再回缀。为7生成更有效的目标代玛.还有一个要重点考虑的问题是女何更有效地利用寄存器。另外.地址计算、数组引用等也都有不同,就不在此逐一叙述。