- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章 符号表
BEGIN …IF e<0 THEN p (f); ….. END; {q} BEGIN …. Q (e); … END; {p} PROCEDURE t ; j: real; BEGIN … p (e); … END; {t} BEGIN … WHILE c>0 DO …; p (d); … END. {main}
第八章 符号表
解:在编译过程中,当进入某过程体时,每引用一次 在编译过程中,当进入某过程体时, 标识符便需要查找栈符号表,查找范围由DISPLAY栈 标识符便需要查找栈符号表,查找范围由DISPLAY栈 顶值和TOP 的值控制,首先在栈符号表内的(TOP顶值和TOP 的值控制,首先在栈符号表内的(TOP- 1 ) DISPLAY栈顶值这样一个范围内查找 若找到了, 栈顶值这样一个范围内查找, 至DISPLAY栈顶值这样一个范围内查找,若找到了, 便可以从中取出该标识符的有关属性;若未查到, 便可以从中取出该标识符的有关属性;若未查到,则 需要继续在它的嵌套外层中查找,一直到最外层;如 需要继续在它的嵌套外层中查找,一直到最外层; 果引用的某标识符一直查到主程序还查不到它的说明 或某些属性不相符,则说明语义不正确, 或某些属性不相符,则说明语义不正确,处理程序将 向用户报告出错信息. 向用户报告出错信息. 下面给出了元程序在编译的不同时刻符号表
第八章 符号表
第八章 符号表
�
第八章 符号表
例题与习题解答
[例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;
第八章 符 号 表
编译过程中编译程序需要不断汇集和反复查证出现在 源程序中各种名字的属性和特征等有关信息. 源程序中各种名字的属性和特征等有关信息.这些信息通 常记录在一张或几张符号表中. 常记录在一张或几张符号表中.符号表的每一项包括两部 一部分是名字(标识符); );另一部分是此名字的有关 分:一部分是名字(标识符);另一部分是此名字的有关 信息.每个名字的有关信息是指种属(如简单变量,数组, 信息.每个名字的有关信息是指种属(如简单变量,数组, 过程等),类型(如整,实,布尔等).这些信息将用于 过程等),类型(如整, 布尔等).这些信息将用于 ),类型 ). 语义检查, 语义检查,产生中间代码以及最终生成目标代码等不同阶 乎在编译程序工作的全过程中, 段.几乎在编译程序工作的全过程中,都需要对符号表进 行频繁访问,可以认为查表或填表等操作, 行频繁访问,可以认为查表或填表等操作,在编译程序的 编译过程中是很大的一笔开销.因此,合理地组织符号表, 编译过程中是很大的一笔开销.因此,合理地组织符号表, 并相应地选择好查表和填表的方法,是提高编译序工作效 并相应地选择好查表和填表的方法, 率的重要一环. 率的重要一环.