西安电子科技大学《编译原理》

西安电子科技大学《编译原理》

ID:39385338

大小:748.81 KB

页数:38页

时间:2019-07-02

西安电子科技大学《编译原理》_第1页
西安电子科技大学《编译原理》_第2页
西安电子科技大学《编译原理》_第3页
西安电子科技大学《编译原理》_第4页
西安电子科技大学《编译原理》_第5页
资源描述:

《西安电子科技大学《编译原理》》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、4.4声明语句的翻译声明语句的作用是为可执行语句提供信息,以便于其执行。对声明语句的处理,主要是将所需要的信息正确地填写进合理组织的符号表中。4.4.1变量的声明<1>变量的类型定义与声明类型定义:为编译器提供存储空间大小的信息变量声明:为变量分配存储空间组合数据的类型定义和变量声明:定义与声明在一起,定义与声明分离。定义确定存储空间,声明分配存储空间简单数据类型的存储空间是已经确定的,如integer可以占4个字节,real可以占8个字节,char可以占1个字节等。组合数据类型变量的存储空间,需要编译器根据程序员提供的信息计算而定。1<1>变量的类型定义与声明例:在Pascal程

2、序中的类型定义与变量声明:先定义后声明:typeplayer=array[1..2]ofinteger;matrix=array[1..24]ofchar;varc,p:player;winner:boolean;display:matrix;movect:integer;定义与声明同时:varc,p:array[1..2]ofinteger;display:array[1..24]ofchar;强调:简单变量声明中类型是预定义的;组合变量声明中类型需自己定义。(定义的两种形式)2<2>变量声明的语法制导翻译(a)变量声明的文法:D→D;D(1)

3、id:T(2)T→int(3)

4、r

5、eal(4)

6、array[num]ofT(5)

7、^T(6)产生式(5)是数组类型的声明,其中的数组元素个数由num表示,如num可以是5或10等,这是一个简化了的表示方法,它等价于1..5或1..10。产生式(6)是指针类型的声明,它的宽度(大小)是一个常量。数组元素的类型和指针所指对象的类型可以是任意合法的类型。此文法可以声明多维数组,如数组A的声明形式可以是:A:array[d1]ofarray[d2]of...array[dn]ofinteger多维数组以行为主存储。因为:第一维是有d1个元素的一维数组,每个元素又是一个n-1维的数组;依此类推。3<2>变量声明的语法制导翻译

8、(续1)(b)填写符号表信息的语法制导翻译全程量offset:记录当前被处理符号存储的偏移量,初值设为0属性.type和.width:变量的类型和所占据的存储空间过程enter(name,type,offset):为type类型的变量name建立符号表条目,并为其分配存储空间(位置)offset(1)D→D;D(2)D→id:T(3)T→int(4)T→real(5)T→array[num]ofT1(6)T→^T1{enter(id.name,T.type,offset);offset:=offset+T.width;}{T.type:=integer;T.width:=4;}{T

9、.type:=real;T.width:=8;}{T.type:=array(num.val,T1.type);T.width:=num.val*T1.width;}{T.type:=pointer(T1.type);T.width:=4;}4<2>变量声明的语法制导翻译(续2)例声明序列的语法制导翻译:a:array[10]ofint;x:int;序号归约使用的产生式语义处理结果(1)T1→intT1.type=integerT1.width=4(2)T2→array[num]ofT1T2.type=array(10,integer)T2.width=10*4=40(3)D1→i

10、d:T2enter(a,array(10),0)offset=40(4)T3→intT3.type=integerT3.width=4(5)D2→id:T3enter(x,integer,40)offset=44(2)D→id:T{enter(id.name,T.type,offset);offset:=offset+T.width;}(3)T→int{T.type:=integer;T.width:=4;}(5)T→array[num]ofT1{T.type:=array(num.val,T1.type);T.width:=num.val*T1.width;}(6)T→^T1{T

11、.type:=pointer(T1.type);T.width:=4;}54.4.3过程的定义与声明1.过程(procedure):过程头(做什么)+过程体(怎么做);函数;主程序2.过程的三种形式:过程定义、过程声明和过程调用。例:Ada过程定义:procedureswap(x,y:inoutinteger)is--规格说明temp:integer;--体中的声明begintemp:=x;x:=y;y:=temp;--可执行语句序列endswap;声明与引用:pro

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。