《第八章符号表》由会员分享,可在线阅读,更多相关《第八章符号表(9页珍藏版)》请在金锄头文库上搜索。
1、酿吭花研呜人诀委恒扣缨壹驯朽钦广痢篡账瞪煽揣毙口非清近淌砖太化沾第八章符号表第八章符号表第八章第八章 符符 号号 表表 编译过程中编译程序需要不断汇集和反复查证出现在编译过程中编译程序需要不断汇集和反复查证出现在源程序中各种名字的属性和特征等有关信息。这些信息通源程序中各种名字的属性和特征等有关信息。这些信息通常记录在一张或几张符号表中。符号表的每一项包括两部常记录在一张或几张符号表中。符号表的每一项包括两部分:一部分是名字(标识符);另一部分是此名字的有关分:一部分是名字(标识符);另一部分是此名字的有关信息。每个名字的有关信息是指种属(如简单变量、数组、信息。每个名字的有关信息是指种属(如
2、简单变量、数组、过程等)、类型(如整、实、布尔等)。这些信息将用于过程等)、类型(如整、实、布尔等)。这些信息将用于语义检查、产生中间代码以及最终生成目标代码等不同阶语义检查、产生中间代码以及最终生成目标代码等不同阶段。几段。几乎在编译程序工作的全过程中,都需要对符号表进乎在编译程序工作的全过程中,都需要对符号表进行频繁访问,可以认为查表或填表等操作,在编译程序的行频繁访问,可以认为查表或填表等操作,在编译程序的编译过程中是很大的一笔开销。因此,合理地组织符号表,编译过程中是很大的一笔开销。因此,合理地组织符号表,并相应地选择好查表和填表的方法,是提高编译序工作效并相应地选择好查表和填表的方法
3、,是提高编译序工作效率的重要一环。率的重要一环。梧增男晾慨殉柬褂腆众无不虞疵绩慰晤康忍贾氦稗奔啊噪退觅帆容膀困敖第八章符号表第八章符号表第八章 符号表本章我们介绍符号表的一般组织和使用方法,本章在全本章我们介绍符号表的一般组织和使用方法,本章在全书中是相对比较容易的一章。仔细看书,我相信理解起来并不书中是相对比较容易的一章。仔细看书,我相信理解起来并不难。值得一提的是杂凑技术,名字的作用范围,应多看两遍。难。值得一提的是杂凑技术,名字的作用范围,应多看两遍。决傲袭疙汽滓朱嚎喜帽中刻会神廷段丽汰氓啸搁睹装帽涯僵淑桂旁搏寐苍第八章符号表第八章符号表第八章 符号表例题与习题解答例题与习题解答 例例8
4、.1 在编译过程中,嵌套调用的过程间寻址问题如何解决在编译过程中,嵌套调用的过程间寻址问题如何解决?下面是一个示意性元程序,请给出编译期间栈式符?下面是一个示意性元程序,请给出编译期间栈式符号表的变化情况。号表的变化情况。 PROGRAM main a=10; b,c: integer; d,e: real; PROCEDURE p ( x:real ); f:real; PROCEDURE q (y:real); g=5; n:boolean;形单超彦舅执劲芦柑懊甩艳笋腮走篷藤蒲吧充刨檀希眯锄裕解益氏径聂瓦第八章符号表第八章符号表第八章 符号表 BEGIN IF e0 DO ; p (d);
5、 END. main垣溺满抽净楔杰肄京窑涎摹晚乙柴忿谣贿溺杯噎师与浚摄疑便遗认拜痴萄第八章符号表第八章符号表第八章 符号表 解:在编译过程中,当进入某过程体时,每引用一次解:在编译过程中,当进入某过程体时,每引用一次标识符便需要查找栈符号表,查找范围由标识符便需要查找栈符号表,查找范围由DISPLAY栈栈顶值和顶值和TOP 的值控制,首先在栈符号表内的的值控制,首先在栈符号表内的(TOP- 1 )至)至DISPLAY栈顶值这样一个范围内查找,若找到了,栈顶值这样一个范围内查找,若找到了,便可以从中取出该标识符的有关属性;若未查到,则便可以从中取出该标识符的有关属性;若未查到,则需要继续在它的嵌
6、套外层中查找,一直到最外层;如需要继续在它的嵌套外层中查找,一直到最外层;如果引用的某标识符一直查到主程序还查不到它的说明果引用的某标识符一直查到主程序还查不到它的说明或某些属性不相符,则说明语义不正确,处理程序将或某些属性不相符,则说明语义不正确,处理程序将向用户报告出错信息。向用户报告出错信息。 下面给出了元程序在编译的不同时刻栈符号表的变下面给出了元程序在编译的不同时刻栈符号表的变化:化:嘲讣匠第变哆宜爹李勇族犬扶玻推苯廉帚篇耸枪烤糯陌晶购柿木屁辞但逸第八章符号表第八章符号表第八章 符号表蓑逛萌烤邓襄拷三旷枢堕扫绒段缀继挎蛇朱塌索档齐崭铆胺虏脉巩愁乎拣第八章符号表第八章符号表第八章 符号表稻捷戍柏搞追汕念条膀骇按诲令恬穗燃哺录怯凳扮反活珊绰铀迁棘均谋勇第八章符号表第八章符号表第八章 符号表按柿焦旧纪皖惫哀临肥卫援烃掷赞柄七威气妹余比惕堡唇闽浊冗夹闪迹霓第八章符号表第八章符号表第八章 符号表 岭号蘑难搭浓晃六嘱观东脂钵衰籍豺杜主妮末宵席右卷翅酒象每协绞教更第八章符号表第八章符号表第八章 符号表