例:设有 Pasca程序段 program example(input, output var x,y: real procedure pro; var y, Z: integer; begin X=y, end begin end
例:设有Pascal程序段 program example(input,output); var x,y: real; procedure pro; var y,z: integer; begin …… x:=y; …… end begin …… end
在过程pro中赋值语句X=y的x为主程序中说明的x,而y为 过程序中说明的y 作用域还包括文件作用域,如C语言的函数作用域是从说 明点开始,一直延伸到源文件结束 作用域规则的不同直接影响到编译程序需生成的代码 作用域规则分为静态作用域和动态作用域二种。静态作用域 是指当标识符在本分程序中没有说明时,到说明该分程序的 上分程唐中找相应的标识符,依次桊推直至找到该标识符 或整个上层分程序中均没找到该标识符为止。否则出错。动 态作用域是指当标识符在本分程序逻辑中没有说明时,到调 用该分程序的程序中找,依次类推直至找到该标识符或整个 调用程序中均没找到该标识符为止,同样动态作用域也分为 找到和出错。显然上述卩asca中的作用域规则是静态作用域 规则,静态作用域规则在编译中处理要比动态作用域的处理 简单些
在过程pro中赋值语句x:=y的x为主程序中说明的x,而y为 过程序中说明的y。 作用域还包括文件作用域,如C语言的函数作用域是从说 明点开始,一直延伸到源文件结束。 作用域规则的不同直接影响到编译程序需生成的代码。 作用域规则分为静态作用域和动态作用域二种。静态作用域 是指当标识符在本分程序中没有说明时,到说明该分程序的 上一分程序中找相应的标识符,依次类推直至找到该标识符 或整个上层分程序中均没找到该标识符为止。否则出错。动 态作用域是指当标识符在本分程序逻辑中没有说明时,到调 用该分程序的程序中找,依次类推直至找到该标识符或整个 调用程序中均没找到该标识符为止,同样动态作用域也分为 找到和出错。显然上述Pascal中的作用域规则是静态作用域 规则,静态作用域规则在编译中处理要比动态作用域的处理 简单些
7.14控制结构 种程序设计语言的控制结构是该语言在程序运行期间 用于改变控制流的语言特征集合。它包括有条件控制转移 条件执行、循环控制、过程序调用、转移和出口。编译程序 在翻译时必须保证源程序不能违法控制结构的语义。如 Pasca中只能从循环体内转向循环体外、C语言中不能从 个函数转向另一个函数、BASC中不能在循环体内修改循环 变量的值,而C没有这种限制 例:错误的控制结构 begin for i: =1 to 10 begin label: x =x+1 end goto label end
7.1.4 控制结构 一种程序设计语言的控制结构是该语言在程序运行期间 用于改变控制流的语言特征集合。它包括有条件控制转移, 条件执行、循环控制、过程序调用、转移和出口。编译程序 在翻译时必须保证源程序不能违法控制结构的语义。如 Pascal中只能从循环体内转向循环体外、C语言中不能从一 个函数转向另一个函数、BASIC中不能在循环体内修改循环 变量的值,而C没有这种限制。 例:错误的控制结构 begin for i:=1 to 10 begin label:x:=x+1; …… end; goto label …… end
程序的控制结构实际是程序执行权的转移。为了减少程 序员编制的源程序中的错误。通常对程序的结构一定的约定 因此,在设计或翻译程序设计语言的的控制结构时,需考虑: 设定或限制某种程序的控制,应满足程序设计的方法学 或结构化程序设计的思想 对每一种程序的控制结构,均能用编译的翻译技术来实 现翻译。 提供程序的控制结构有利于程序员实现程序和査找源程 序的错误 综上所述,如何实现控制结构的翻译也是编译程序必须 考虑的问题
程序的控制结构实际是程序执行权的转移。为了减少程 序员编制的源程序中的错误。通常对程序的结构一定的约定。 因此,在设计或翻译程序设计语言的的控制结构时,需考虑: 设定或限制某种程序的控制,应满足程序设计的方法学 或结构化程序设计的思想。 对每一种程序的控制结构,均能用编译的翻译技术来实 现翻译。 提供程序的控制结构有利于程序员实现程序和查找源程 序的错误。 综上所述,如何实现控制结构的翻译也是编译程序必须 考虑的问题
72运行时的内存分配 编译程序需要为常量或变量等数据分配运行时的存储空 间。编译程序从操作系统中申请编译程序计算出的所需的内 存或者编译程序生成在运时需审请内存的指令。 内存分配包括以下3个任务: (1)确定用来表示某一数据项的内存的大小。 (2)使用适当的内存分配策略实现具体数据的作用域和生命 (3)确定以适当的算法访问生命期内的数据,包括基本型数 据构造型数据 以上三个任务实际上是完成逻辑数据到具体数据的映射。根 据内存分配的时机,分为静态存储分配和动态存储分配方式 采用哪一种分配策略是根据源语言的结构特点、源语言的数 据类型、源语言中的作用域规则,源语言存储管理和组织的 万式的复杂度都会影响到存储空间的分配策略。 下面就存储分配的主要技术,进行分析和讨论
7.2 运行时的内存分配 编译程序需要为常量或变量等数据分配运行时的存储空 间。编译程序从操作系统中申请编译程序计算出的所需的内 存或者编译程序生成在运时需申请内存的指令。 内存分配包括以下3个任务: (1) 确定用来表示某一数据项的内存的大小。 (2) 使用适当的内存分配策略实现具体数据的作用域和生命 期。 (3) 确定以适当的算法访问生命期内的数据,包括基本型数 据构造型数据。 以上三个任务实际上是完成逻辑数据到具体数据的映射。根 据内存分配的时机,分为静态存储分配和动态存储分配方式。 采用哪一种分配策略是根据源语言的结构特点、源语言的数 据类型、源语言中的作用域规则,源语言存储管理和组织的 方式的复杂度都会影响到存储空间的分配策略。 下面就存储分配的主要技术,进行分析和讨论