




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、内容提要内容提要: : - - 语义分析之一语义分析之一6.1 6.1 符号表的地位和作用符号表的地位和作用6.2 6.2 符号表的组织与管理符号表的组织与管理6.3 6.3 符号表的结构设计符号表的结构设计6.4 6.4 符号表的构造过程示例符号表的构造过程示例 6.5 6.5 运行时刻存储分配运行时刻存储分配 符号表是符号表是标识符标识符的的动态语义词典动态语义词典,属于,属于编译中语义分析的知识库;主要内容:编译中语义分析的知识库;主要内容: 名字名字 标识符源码,用作查询关键字;标识符源码,用作查询关键字; 类型类型 - - 该标识符的数据类型及其相关信息;该标识符的数据类型及其相关信
2、息; 种类种类 - - 该标识符在源程序中的语义角色;该标识符在源程序中的语义角色; 地址地址 - - 与值单元相关的一些信息;与值单元相关的一些信息; 定义和重定义检查;定义和重定义检查; 类型匹配校验;类型匹配校验; 数据的越界和溢出检查;数据的越界和溢出检查; 值单元存储分配信息;值单元存储分配信息; 函数、过程的参数传递与校验;函数、过程的参数传递与校验; 符号表符号表的功能的功能标识符标识符四种语四种语义信息义信息6.2.1 6.2.1 符号表的工作原理符号表的工作原理 遇遇 定义性标识符定义性标识符( (在说明中在说明中)- )- 把语义信把语义信息息填填入表中,并修改其入表中,并
3、修改其TOKENTOKEN的指针,使其指向相的指针,使其指向相应的表项:应的表项:(i , )i , )该该标识符标识符符号表项符号表项 遇遇 应用性标识符应用性标识符( (在语句中在语句中)- )- 查查符号表符号表的相应项,查到后修改其的相应项,查到后修改其TOKENTOKEN的指针,使其指向的指针,使其指向相应的表项:相应的表项:6.2.2 6.2.2 符号表的查询、访问方式符号表的查询、访问方式线性表、顺序表、索引表和散列表,皆可以采用。线性表、顺序表、索引表和散列表,皆可以采用。(i , )i , )该该标识符标识符符号表项符号表项6.2.3 6.2.3 符号表的维护、管理方式符号表
4、的维护、管理方式 一个源文件有若干个函数组成,通常,一个源文件有若干个函数组成,通常,每个函数对每个函数对应一个符号表应一个符号表,此外,还是有一个,此外,还是有一个公用符号表公用符号表; 符号表如何管理?往往取决于所属语言的程序结符号表如何管理?往往取决于所属语言的程序结构,就构,就 C C语言来说,可以在内存设置一定长度的语言来说,可以在内存设置一定长度的符号符号表区表区,并建立适当的,并建立适当的索引机制索引机制,访问相应的符号表:,访问相应的符号表:公用公用符号表符号表FUNCTION 2 符号表符号表 FUNCTION 1 符号表符号表现行现行函数符号表函数符号表全局全局 符号表区符
5、号表区局部局部 符号表区符号表区 索引索引机制机制FUNCTION exp(x:REAL;VAR y:INTEGER):REAL;FUNCTION exp(x:REAL;VAR y:INTEGER):REAL; CONST pai CONST pai=3.14;=3.14; TYPE arr TYPE arr=ARRAY1.5,1.10 OF INTEGER;=ARRAY1.5,1.10 OF INTEGER; VAR a:arr VAR a:arr; b,a:real; b,a:real; BEGIN BEGIN ; a2,5:=100; b:=z+6; ; a2,5:=100; b:=z+
6、6; END; END;【例【例6.16.1】有下列函数过程:】有下列函数过程: 需要进符号表的标识符:需要进符号表的标识符: exp(exp(函数函数, ,附带信息附带信息: :类型、参数情况和入口地址类型、参数情况和入口地址),),paipai( (常量常量),),arrarr( (类型类型),),a(a(下标变量下标变量) ),b b( (简单变简单变量量) ), 怎样检查出:怎样检查出:a a 重定义、重定义、z z 无定义以及下表变量无定义以及下表变量a2,5a2,5的值地址在何处?的值地址在何处? 由于标识符的种类不同,导致语义属性也不尽相同;由于标识符的种类不同,导致语义属性也不
7、尽相同;怎样组织符号表?下面提供一个符号表的怎样组织符号表?下面提供一个符号表的体系结构体系结构: SYNBL SYNBL(符号表)(符号表) NAME TYPE CAT ADDRNAME TYPE CAT ADDR PFINFL(PFINFL(函数表函数表) )CONSL(CONSL(常量表常量表) ) AINFL( AINFL(数组表数组表) )RINFL(RINFL(结构表结构表) )VALL(VALL(活动纪录活动纪录) )LENL(LENL(长度表长度表) )TYPELTYPEL(类型表)(类型表) TVAL TPOINTTVAL TPOINT名字名字 类型类型 种类种类 地址地址
8、tokentoken i i 6.3.1 6.3.1 符号表总表符号表总表(SYNBL)(SYNBL)NAMENAMETYPTYPCATCATADDRADDR 结构:结构:NEME(NEME(名字名字) ) 标识符源码标识符源码( (或内部码或内部码) )TYP(TYP(类型类型) ) 指针,指向类型表相应项;指针,指向类型表相应项;CAT(CAT(种类种类) ) 种类编码:种类编码: f(f(函数函数) ),c(c(常量常量) ),t(t(类型类型) ),d(d(域名域名) ), v,vn,vfv,vn,vf( (变量,换名形参,赋值形参变量,换名形参,赋值形参) );ADDR(ADDR(地
9、址地址) ) 指针,根据标识符的指针,根据标识符的种类种类不同,分不同,分别指向:别指向:PFINFL,CONSL,LENL,VALL,PFINFL,CONSL,LENL,VALL,6.3.2 6.3.2 类型表类型表(TAPEL)(TAPEL) 结构:结构:TVALTVALTPOINTTPOINTTVAL(TVAL(类码类码) ) 类型代码:类型代码: i i( (整型整型) ),r r( (实型实型) ),c c( (字符型字符型) ),b b( (布尔型布尔型) ), a a( (数组型数组型) ),d d( (结构型结构型) ),TPOINT(TPOINT(指针指针) ) 根据数据类型
10、不同,指向不同的根据数据类型不同,指向不同的信息表项:信息表项: 基本数据类型基本数据类型( (i i, ,r r, ,c c, ,b b) nul) nul( (空指针空指针) ); 数组类型数组类型( (a a) ) 指向数组表;指向数组表; 结构类型结构类型( (d d) ) 指向结构表指向结构表; ; 6.3.3 6.3.3 数组表数组表(AINFL)(AINFL) 结构:结构:LOWLOWUPUPCTPCTPCLENCLEN每维占表中一个纪录每维占表中一个纪录 LOW( LOW(数组的下界数组的下界)-)-(C C语言自动设为:语言自动设为:0 0); ; UP( UP(数组的上界数
11、组的上界) ) CTP( CTP(成分类型指针成分类型指针) ) 指针,指向该维数组成分类指针,指向该维数组成分类型型( (在类型表中的信息在类型表中的信息);); CLEN( CLEN(成分类型的长度成分类型的长度) ) 成分类型的数据所占成分类型的数据所占值单值单元的个数元的个数; 这里假定:这里假定:值单元个数值单元个数依依字长字长为单位计算。为单位计算。6.3.4 6.3.4 结构表结构表(RINFL)(RINFL) 结构:结构:每个域占表中一个纪录每个域占表中一个纪录 ID( ID(结构的域名结构的域名) ) OFF( OFF(区距区距) )是是ididk k的值单元首址相对于所在记
12、录值区的值单元首址相对于所在记录值区区头位置;区头位置;约定:约定:offoff1 1=0=0, offoff2 2= off= off1 1+LEN(tp+LEN(tp1 1), ), off offn n= off= offn-1n-1+ +LEN(tpLEN(tpn-1n-1) )。 ididn-1n-1的长度的长度 TP(TP(域成分类型指针域成分类型指针) ) 指针,指向指针,指向ididk k域域成分类型成分类型( (在类型表中的信息在类型表中的信息);); IDID OFFOFF TPTP6.3.5 6.3.5 函数表函数表(PFINFL)(PFINFL) 结构:结构:LEVEL
13、LEVEL OFF OFF FN FNENTRYENTRY PARAMPARAM LEVEL( LEVEL(层次号层次号) ) 该过函静态层次嵌套号该过函静态层次嵌套号, , OFF( OFF(区距区距) ) 该过函自身数据区起始单元相对该该过函自身数据区起始单元相对该过函值区区头位置过函值区区头位置 ; FN(FN(参数个数参数个数) ) 该过函的形式参数的个数;该过函的形式参数的个数; PARAM(PARAM(参数表参数表) ) 指针,指向形参表;指针,指向形参表; ENTRY(ENTRY(入口地址入口地址) ) 该函数目标程序首地址该函数目标程序首地址( (运运行时填写行时填写) );
14、- 过程过程或或函数函数语义信息语义信息6.3.6 6.3.6 其他表其他表( () ) 常量表常量表(CONSL)- (CONSL)- 存放相应常量的初值;存放相应常量的初值; 长度表长度表(LENL) (LENL) 存放相应数据类型所占值单元存放相应数据类型所占值单元个数;个数; 活动纪录表活动纪录表(VALL) (VALL) 一个函数一个函数( (或过程或过程) )虚拟虚拟的值单元存储分配表;此分配表在运行调用时才可的值单元存储分配表;此分配表在运行调用时才可用,故称用,故称活动纪录活动纪录。 结构:结构: 结构:结构: 结构结构: ENTENT 2 2 ? ? v3 v3 vn vni
15、tpitp y y v2 v2 vf vfrtprtp x x临时变量值区临时变量值区 b值 y值 数组a值区 管理区 exp值 x值 链接表3.143.14 50 50 1 1itpitp10101 110105 51 1 a a a ac,i,r,bc,i,r,bv1v1v2v2v3v3v4v4v5v5 t t arrarr v4 v4 v v a a c crtprtppaipai v5 v5 v vrtprtp b b v3 v3vnvnitpitp y y v2 v2 vf vfrtprtp x x f frtprtpexpexpSYNBLSYNBLPFINFLPFINFLVALLV
16、ALLCONSLCONSLLENLLENLAINFLAINFLTYPELTYPEL【例【例6.26.2】有类型说明有类型说明: : TYPE arrTYPE arr = ARRAY 1.10 OF ARRAY 1.5 OF INTEGER; = ARRAY 1.10 OF ARRAY 1.5 OF INTEGER; 试填写符号表。试填写符号表。 SYNBLSYNBLTYPELTYPEL i r c bAINFLAINFLarra110a15itp设:实型占设:实型占8 8个存储单元,整型占个存储单元,整型占4 4个单元,布尔型和字符型占个单元,布尔型和字符型占1 1个单元。个单元。 420tL
17、ENLLENL200【例【例6.36.3】有类型说明有类型说明: :试填写符号表。试填写符号表。 SYNBLSYNBLTYPELTYPELAINFLAINFLrecd110dbtp设:实型占设:实型占8 8个存储单元,整型占个存储单元,整型占4 4个单元,布尔型和字符型占个单元,布尔型和字符型占1 1个单元。个单元。 1 tLENLLENLTYPE rec = RECORD u: INTEGER; v: ARRAY 1.10 OF BOOLEAN; r: RECORD x, y : REAL END END; i,r,c,bi,r,c,bRINFLRINFLu0itpuitpd4v4avd10
18、r14x0rtprtprrtpdxdd8y8yrtp81630【例【例6.46.4】试填写符号表。试填写符号表。 SYNBLSYNBLTYPELTYPELvf?rtp设:实型占设:实型占8 8个存储单元,整型占个存储单元,整型占4 4个单元,布尔型和字符型占个单元,布尔型和字符型占1 1个单元。个单元。 ? PROCEDURE P1(VAR x: REAL; y: INTEGER); BEGIN END; i i r r c c b bPFINFLPFINFLrtpP1rtppxvny2yrtp有过程说明有过程说明: :设设P1P1所在层所在层LEVEL=1LEVEL=1,即所定义的层,即所定
19、义的层LEVEL=2,LEVEL=2,1P122?Entryxvn? vf? 注注: ? 该标识符的值单元首址,该标识符的值单元首址, 为相对地址(为相对地址(LEVEL, offsetLEVEL, offset) LEVEL LEVEL 该标识符该标识符所在层次号,所在层次号, offset offset 区距,区距,存储分配时可定存储分配时可定。解决的问题:解决的问题:标识符标识符变量的变量的地址分配地址分配与对它们的访问。与对它们的访问。 6.5.1 6.5.1 标识符值单元分配标识符值单元分配 值单元分配分两类:值单元分配分两类: 在在编译阶段编译阶段即可完成真实的地址分配。在编译时即
20、可完成真实的地址分配。在编译时对所有数据对象分配固定的存储单元,且在运行是始对所有数据对象分配固定的存储单元,且在运行是始终保持不变。终保持不变。1.1.静态分配静态分配2.2.动态分配动态分配 指在运行时刻进行的值单元分配,在编译时只能进指在运行时刻进行的值单元分配,在编译时只能进行相对地址分配。行相对地址分配。 栈式动态分配;栈式动态分配; 堆式动态分配。堆式动态分配。 值单元分配是以过程函数为单位的。值单元分配是以过程函数为单位的。 注:注:6.5.2 6.5.2 活动记录活动记录 1.三个概念三个概念过程:过程:一个可执行模块,过程或函数,通常完成特一个可执行模块,过程或函数,通常完成
21、特定的功能。定的功能。活动:活动: 过函的一次执行。每执行一次过程体,则产过函的一次执行。每执行一次过程体,则产生该过函的一个活动。生该过函的一个活动。活动记录:活动记录: 一个有一个有结构结构的连续存储块。用来存储过的连续存储块。用来存储过函一次执行中所需要的信息。函一次执行中所需要的信息。 如果不支持可变数据结构,活动记录的体积是如果不支持可变数据结构,活动记录的体积是可以在编译时确定的。可以在编译时确定的。 活动记录仅是一种活动记录仅是一种存储映像存储映像,编译程序所进行,编译程序所进行的运行时刻存储分配是在符号表中进行的。的运行时刻存储分配是在符号表中进行的。 6.5.2 6.5.2
22、活动记录(续)活动记录(续) 2.2.活动记录的结构活动记录的结构 临时单元临时单元 内情向量内情向量 局部变量局部变量 形式单元形式单元 静态链静态链 动态链动态链 返回地址返回地址VALLVALLTOPTOPSPSP连接数据连接数据局部数据局部数据(1 1)连接数据区)连接数据区返回地址返回地址: 动态链动态链: 指向调用该过程的主调程序的指向调用该过程的主调程序的活动记录的指针;活动记录的指针; 静态链静态链: 指向静态直接外层活动记录的指针。指向静态直接外层活动记录的指针。 (2 2)形式单元)形式单元用来存放实参的值或地址。用来存放实参的值或地址。 (3 3)局部数据区)局部数据区
23、用来存放局部变量、内情向量、用来存放局部变量、内情向量、临时单元。临时单元。 (4 4)栈指针)栈指针SPSP 指向现行过程活动记指向现行过程活动记录的起点,即第一个单元;录的起点,即第一个单元; TOPTOP 指向(已占用)栈顶指向(已占用)栈顶单元,即活动记录的最后一单元,即活动记录的最后一个单元。个单元。 6.5.3 6.5.3 简单的栈式存储分配简单的栈式存储分配 没有分程序结构,过程定义不允许嵌套,没有分程序结构,过程定义不允许嵌套,但允许过程的递归调用。但允许过程的递归调用。 以以C C语言为例语言为例: :1 1C C语言程序的存储组织语言程序的存储组织 【例【例6.56.5】
24、C C语言过程调用关系:语言过程调用关系:Main( )Main( ) Q( )Q( ) R( ) R( ) 则,活动记录栈状态为:则,活动记录栈状态为: R R的活动记录的活动记录 Q Q的活动记录的活动记录MainMain的活动记录的活动记录 全局数据区全局数据区TOPTOPSPSP2 2C C的活动记录的活动记录 临时单元临时单元 内情向量内情向量 局部变量局部变量 形式单元形式单元 参数个数参数个数 返回地址返回地址 Old SPOld SPOld SPOld SP值,即前一活动记录的地址;值,即前一活动记录的地址; 其中:其中:SPSPTOPTOP6.5.3 6.5.3 简单的栈式存
25、储分配(续)简单的栈式存储分配(续) 3 3C C语言的过程调用与返回语言的过程调用与返回 (1 1)过程调用)过程调用 过程调用的四元式序列:过程调用的四元式序列:(param, entry(t1), _, _)(param, entry(t1), _, _) (param, entry(tn(param, entry(tn), _, _), _, _)(call, entry(P(call, entry(P), n, _), n, _) 对应的目标指令:对应的目标指令: (i+3)TOP := entry(ti).Addr (i+3)TOP := entry(ti).Addr /将将tit
26、i地址填到活动记录的形参区去地址填到活动记录的形参区去 (param, (param, entry(tientry(ti) ), _, _), _, _)对应的指令:对应的指令:(call, entry(P(call, entry(P), n,), n, _)_)对应的指令:对应的指令:1TOP := SP 1TOP := SP /保护现行保护现行SPSP3TOP := n 3TOP := n /传递参数个数传递参数个数JSP P JSP P 第第n n个实参地址个实参地址 过程过程P P的入口地址的入口地址 参数个数参数个数 SPSPTOPTOP主调过程活动记录 子过程P的活动记录 Old
27、SPOld SP返回地址返回地址参数个数参数个数形参区t t1 1 t t1 1 主调过程活动记录 SPSPTOPTOP子过程P的活动记录 SPSPn n 子过程子过程P P需完成的工作:定义自需完成的工作:定义自己的活动记录;己的活动记录; SP := TOP+1 /SP := TOP+1 /定义过程定义过程P P的的SP SP 1SP := 1SP := 返回地址返回地址 /保护返回地址保护返回地址TOP := TOP+TOP := TOP+L L / /定义新定义新TOPTOPL LSPSPSPSP返回地址TOPTOPSPSPTOPTOP6.5.3 6.5.3 简单的栈式存储分配(续)简
28、单的栈式存储分配(续) 3 3C C语言的过程调用与返回语言的过程调用与返回 (2 2)过程返回)过程返回 过程返回的四元式:过程返回的四元式:(ret, _, _, _)(ret, _, _, _) 对应的目标指令:对应的目标指令:TOP := SP-1 /TOP := SP-1 /恢复恢复TOPTOPSP := 0SP /SP := 0SP /恢复恢复SPSPX := 2TOP X := 2TOP / /取返回地址,取返回地址,X X为某一变址器为某一变址器UJ 0XUJ 0X / /按按X X中的返回地址实行变址转移中的返回地址实行变址转移 t t1 1 n SP SP 主调过程活动记录
29、 子过程P的活动记录 L LSPSPTOPTOPTOPTOPTOPTOPSPSPSPSPX X返回地址返回地址返回地址返回地址X X6.5.4 6.5.4 嵌套过程语言的栈式存储分配嵌套过程语言的栈式存储分配 过程嵌套的一个关键问题:过程嵌套的一个关键问题:标识符的作用域问题标识符的作用域问题 。 标识符的作用范围往往与它所处的过程相关,也就标识符的作用范围往往与它所处的过程相关,也就是说,同一个标识符,在不同的程序段里,代表不同的是说,同一个标识符,在不同的程序段里,代表不同的对象,具有不同的性质,因此要分配不同的存储空间。对象,具有不同的性质,因此要分配不同的存储空间。 标识符的有效范围:
30、标识符的有效范围:(1 1)在外层未定义,而在内层定义的,服从内层定义;)在外层未定义,而在内层定义的,服从内层定义;(2 2)在外层已定义,而在内层未定义的,服从全范围;)在外层已定义,而在内层未定义的,服从全范围;(3 3)在外层已定义,而在内层也定义的,在外层服从)在外层已定义,而在内层也定义的,在外层服从外层定义,在内层服从内层定义。外层定义,在内层服从内层定义。服从最小作用域原理服从最小作用域原理;1.1.标识符的作用域标识符的作用域2.2.活动记录活动记录6.5.4 6.5.4 嵌套过程语言的栈式存储分配(续)嵌套过程语言的栈式存储分配(续) 问题的提出:问题的提出: 过程过程Q
31、Q可能会引用到它的可能会引用到它的任意外层过程任意外层过程的最新活动记的最新活动记录中的某些数据。录中的某些数据。 为了在活动记录中查找这些为了在活动记录中查找这些非局部名字所对应的存储空间,非局部名字所对应的存储空间,过程过程Q Q运行时必须设法跟踪它的运行时必须设法跟踪它的所所有外层过程有外层过程的最新活动记录的地的最新活动记录的地址。址。 解决问题的思想:解决问题的思想:解决方案:解决方案: 活动记录中增加活动记录中增加静态链静态链!使!使其其指向直接外层指向直接外层的的最新活动记录最新活动记录的的首地址首地址; 临时单元临时单元 内情向量内情向量 局部变量局部变量 形式单元形式单元 参
32、数个数参数个数 静态链静态链 返回地址返回地址 Old SP Old SPSPSPTOPTOP连接数据连接数据3.3.嵌套层次显示表嵌套层次显示表(display)(display)和活动记录结构和活动记录结构(1)(1)连接数据区:连接数据区:用于访问外层的变量用于访问外层的变量 Old SPOld SP返回地址返回地址全局全局DisplayDisplay地址地址参数个数参数个数 形式单元形式单元 显示区表显示区表(Display)(Display) 局部变量局部变量 内情向量内情向量 临时单元临时单元SPSPTOPTOP0 01 12 20 02 2;连接数据 全局全局displaydis
33、play地址地址 主调过程的显示区表首址;主调过程的显示区表首址;老老SP SP 主调过程的活动记录首址;主调过程的活动记录首址;(2)(2)参数个数:参数个数:3 3;3 3(3)(3)形参值单元区:形参值单元区:4 4入口为入口为4 4;换名形参(换名形参(vnvn) 分配分配2 2个单元(地址传递);个单元(地址传递);赋值形参(赋值形参(vfvf) 按相应类型长度分配;按相应类型长度分配; l l为层次号,包含为层次号,包含直接外层直接外层嵌套的嵌套的l l个过个过程的活动记录的首址,再加上本过程的活程的活动记录的首址,再加上本过程的活动记录首址;动记录首址;(4)(4)显示区表显示区
34、表(display)(display): 占占l+1l+1个单元个单元;l+1l+1类型标识符、常量标识符等不分配值单元;类型标识符、常量标识符等不分配值单元;(5)(5)局部变量区:局部变量区:入口为入口为off + l + 2off + l + 2;offoff为形参区最后一个值单元地址;为形参区最后一个值单元地址;局部变量值单元按相应类型长度分配地址;局部变量值单元按相应类型长度分配地址;编译系统定义的变量,按局部变量值单元分配原则分配地址;编译系统定义的变量,按局部变量值单元分配原则分配地址; (6)(6)临时变量区:临时变量区:4. Display4. Display表的建立表的建立
35、 则则Q Q与与R R的的displaydisplay表的关系如下表的关系如下: : 设过程调用关系为设过程调用关系为Q( )Q( ) R( )R( ),且,且R( )R( )的层次号为的层次号为l l,Old SPOld SP返回地址返回地址全局全局DisplayDisplay地址地址参数个数参数个数 形式单元形式单元 显示区表显示区表(Display)(Display) 局部变量局部变量 内情向量内情向量 临时单元临时单元SPSPTOPTOPOld SPOld SP返回地址返回地址全局全局DisplayDisplay地址地址参数个数参数个数 形式单元形式单元 显示区表显示区表(Displa
36、y)(Display) 局部变量局部变量 内情向量内情向量 临时单元临时单元Q Q的活动记录的活动记录 R R的活动记录的活动记录 拷贝拷贝l个单元个单元 拷贝自身的拷贝自身的SPSPl+1l+1个单元个单元【例【例6.66.6】0 0 program P; program P; var var a, x: integer; a, x: integer; 1 1 procedure Q(b procedure Q(b: integer);: integer); var var i: integer; i: integer; 2 2 procedure R(u: integer; var pro
37、cedure R(u: integer; var v: integer); v: integer); var var c, d: integer; c, d: integer; begin begin if u=1 then u=u+1; if u=1 then u=u+1; u,vu,v c,dc,d v:= (a+c)+(b-d v:= (a+c)+(b-d);); b,ib,i end R end R begin begin R(1, x); R(1, x); a,xa,x end Q end Q 1 1 procedure S; procedure S; var var c, i: i
38、nteger; c, i: integer; begin begin a:=1; a:=1; c,ic,i Q(c Q(c);); end S end S begin begin a:=0; a:=0; S; S; end. end.层次:层次:设有设有Pascal程序片段如下:程序片段如下:变量作用域:变量作用域:过程调用关系为:过程调用关系为:P PS SQ QR R 试给出程序运行时的活动记录关系。试给出程序运行时的活动记录关系。 【例【例6.66.6】局部变量局部变量DisplayDisplay表表参数个数参数个数全局全局Display返回地址返回地址Old SPOld SPP P的活
39、动记录的活动记录(0(0层层) )0 00 00 01 12 23 30 04 40 05-85-8a a9-129-12x x局部变量局部变量DisplayDisplay表表参数个数参数个数全局全局Display返回地址返回地址Old SPOld SP局部变量局部变量DisplayDisplay表表形式单元形式单元参数个数参数个数全局全局Display返回地址返回地址Old SPOld SP局部变量局部变量DisplayDisplay表表形式单元形式单元参数个数参数个数全局全局Display返回地址返回地址Old SPOld SPS S的活动记录的活动记录(1(1层层) )0 04 40 0
40、0 01313c ci i13131414151516161717181819-2219-2223-2623-26Q Q的活动记录的活动记录(1(1层层) )131317172727282829291 13030b b31-3431-340 0353536362727i i37-4037-40R R的活动记录的活动记录(2(2层层) )272741414242353543432 24444u u45-4845-48v v49-5049-500 027274141515152525353c cd d54-5754-5758-6158-61 R R活动记录活动记录 Q Q活动记录活动记录 S S活
41、动记录活动记录 P P活动记录活动记录活动记录栈活动记录栈a-(0,5)x-(0,9)c-(1,6)i-(1,10)b-(1,4)i-(1,10)u-(2,4)v-(2,8)c-(2,15)d-(2,19)5.5.值单元的地址分配值单元的地址分配 值单元分配是依据活动记录的结构,在符号表中进行的。值单元分配是依据活动记录的结构,在符号表中进行的。 设有设有PascalPascal程序片段如下,程序片段如下,P1P1所在层所在层level=2level=2;【例【例6.76.7】PROCEDURE P1( x: REAL; VAR y: BOOLEAN );PROCEDURE P1( x: RE
42、AL; VAR y: BOOLEAN ); CONST pai CONST pai=3.14;=3.14; TYPE arr TYPE arr=ARRAY 1.10 OF INTEGER;=ARRAY 1.10 OF INTEGER; VAR m: INTEGER; VAR m: INTEGER; a: arr a: arr; ; l: REAL; l: REAL; FUNCTION F1( z: REAL; k: INTEGER ): REAL; FUNCTION F1( z: REAL; k: INTEGER ): REAL; BEGIN BEGIN END; END; ; ; BEGIN
43、 BEGIN ; ; END; END; 试给出符号表组织及值单元分配情况。试给出符号表组织及值单元分配情况。 设:设:(1)(1)实型占实型占8 8个存储单元,整型占个存储单元,整型占4 4个单元,布尔型和字符型占个单元,布尔型和字符型占1 1个单元。个单元。 (2)(2)换名形参换名形参vn分配分配2个单元,赋值形参个单元,赋值形参vf按相应类型长度分配;按相应类型长度分配;接上页:接上页:SYNBLSYNBLi,r,c,bi,r,c,bTYPELTYPELPFINFLPFINFLP1P1的的VALLVALLCONSLCONSLLENLLENLAINFLAINFL局部变量局部变量DisplayDisplay表表形式单元形式单元参数个数参数个数全局全局DisplayDisplay返回地
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国混凝土减收缩剂行业市场分析及投资价值评估前景预测报告
- 2025河北邯郸市丛台区选聘农村党务(村务)工作者42人考前自测高频考点模拟试题附答案详解(模拟题)
- 2025广西西平乡人民政府招聘村级财务会计委托代理服务中心会计人员2人模拟试卷及完整答案详解一套
- 2025大河智运物流(河南)有限公司招聘10人模拟试卷及答案详解(夺冠)
- 2025贵州省临床检验中心第十三届贵州人才博览会引才2人模拟试卷及答案详解(网校专用)
- 2025江苏淮安市淮阴区人民政府法律顾问选聘12人考前自测高频考点模拟试题及一套参考答案详解
- 2025年中国化妆品用天然色素行业市场分析及投资价值评估前景预测报告
- 2025河北张家口启臻学校高中储备教师招聘考前自测高频考点模拟试题参考答案详解
- 2025江西吉安市青原区睿才人力资源有限公司招聘安排模拟试卷附答案详解(考试直接用)
- 2025江苏连云港市灌云县招聘就业困难人员公益性岗位26人考前自测高频考点模拟试题及参考答案详解
- 对赌协议合同范本
- 脑卒中后吞咽障碍患者进食护理(2023年中华护理学会团体标准)
- 新人教版七年级英语上册预备篇1―3单元测试卷
- HR如何筹划年终奖?(10大经典个税筹划案例)汇编
- 中国糖尿病防治指南课件
- 抵押还款协议-1
- 制氢技术简介
- GB/T 79-2007内六角圆柱端紧定螺钉
- GB/T 12755-2008建筑用压型钢板
- OTN技术与应用(阿法迪)
- 高标准基本农田建设项目电力施工组织设计
评论
0/150
提交评论