- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理课件cap8
第八章 符号表 第八章 符 号 表 编译过程中编译程序需要不断汇集和反复查证出现在源程序中各种名字的属性和特征等有关信息。这些信息通常记录在一张或几张符号表中。符号表的每一项包括两部分:一部分是名字(标识符);另一部分是此名字的有关信息。每个名字的有关信息是指种属(如简单变量、数组、过程等)、类型(如整、实、布尔等)。这些信息将用于语义检查、产生中间代码以及最终生成目标代码等不同阶段。几乎在编译程序工作的全过程中,都需要对符号表进行频繁访问,可以认为查表或填表等操作,在编译程序的编译过程中是很大的一笔开销。因此,合理地组织符号表,并相应地选择好查表和填表的方法,是提高编译序工作效率的重要一环。 本章我们介绍符号表的一般组织和使用方法,本章在全书中是相对比较容易的一章。仔细看书,我相信理解起来并不难。值得一提的是杂凑技术,名字的作用范围,应多看两遍。 例题与习题解答 [例8。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 THEN p (f); ….. END; {q} BEGIN …. Q (e); … END; {p} PROCEDURE t ; j: real; BEGIN … p (e); … END; {t} BEGIN … WHILE c0 DO …; p (d); … END. {main} 解:在编译过程中,当进入某过程体时,每引用一次标识符便需要查找栈符号表,查找范围由DISPLAY栈顶值和TOP 的值控制,首先在栈符号表内的(TOP- 1 )至DISPLAY栈顶值这样一个范围内查找,若找到了,便可以从中取出该标识符的有关属性;若未查到,则需要继续在它的嵌套外层中查找,一直到最外层;如果引用的某标识符一直查到主程序还查不到它的说明或某些属性不相符,则说明语义不正确,处理程序将向用户报告出错信息。 下面给出了元程序在编译的不同时刻栈符号表的变化: 第九章运行时存储空间组织(1) 编译程序在完成词法、语法和语义分析后,在生成目标代码之前,需要把程序的静态正文和实现这个程序的运行时的活动联系起来弄清楚将来在代码运行时刻,源代码中的各种变量、常量等用户定义的量是如何存放的,如何去访问它们。 * *
文档评论(0)