编泽原理 第八章符号表
编译原理 第八章 符号表
编译原理 符号表 编译过程中编译程序需要不断汇集和反复查证出现在源程序 中各种名字的属性和特征等有关信息。这些信息通常记录在 一张或几张符号表中。 符号表的每一项包含两部分,一部分是名字(标识符),另 一部分是此名字的有关信息。每个名字的有关信息一般指种 属(如简单变量、数组、过程等)、类型(如整、实、布尔 等)等等。 慧编译过程中,每当扫描器识别出一个单词后,编译程序就查 阅符号表,看它是否已在其中。如果它是一个新名就将它填 进表里。它的有关信息将在词法分析和语法-语义分析过程中 陆续填入。 第2页
编译原理 第2页 符号表 编译过程中编译程序需要不断汇集和反复查证出现在源程序 中各种名字的属性和特征等有关信息。这些信息通常记录在 一张或几张符号表中。 符号表的每一项包含两部分,一部分是名字(标识符),另 一部分是此名字的有关信息。每个名字的有关信息一般指种 属(如简单变量、数组、过程等)、类型(如整、实、布尔 等)等等。 编译过程中,每当扫描器识别出一个单词后,编译程序就查 阅符号表,看它是否已在其中。如果它是一个新名就将它填 进表里。它的有关信息将在词法分析和语法-语义分析过程中 陆续填入
编泽原理 符号表 本章内容概要 符号表的组织和作用 曹符号表的作用 曹符号表的组织方式 整理与查找 曹线性表 雪对折查找与二叉树 曹杂凑技术 意名字的作用范围 慧符号表的内容 第3苑
编译原理 第3页 符号表 本章内容概要 符号表的组织和作用 符号表的作用 符号表的组织方式 整理与查找 线性表 对折查找与二叉树 杂凑技术 名字的作用范围 符号表的内容
编译原理 符号表 符号表的组织和作用 符号表的信息栏中登记了每个名字的有关性质,了 如类型(整 实或布尔等)、种属(简单变量、数组、过程等)、大小(长度, 即所需的存储单元字数)以及相对数(指分配给该名字的存储 单元的相对地址)。不同的程序语言对于名字性质的定义务 有不同,符号表的性质须到目标程序运行时才能确定下来。 雪每当编译程序碰到一个新名时就按其语义将它登记在符号表 的某一端中。 第4觉
编译原理 第4页 符号表 符号表的组织和作用 符号表的信息栏中登记了每个名字的有关性质,如类型(整、 实或布尔等)、种属(简单变量、数组、过程等)、大小(长度, 即所需的存储单元字数)以及相对数(指分配给该名字的存储 单元的相对地址)。不同的程序语言对于名字性质的定义务 有不同, 符号表的性质须到目标程序运行时才能确定下来。 每当编译程序碰到一个新名时就按其语义将它登记在符号表 的某一端中
编泽原理 符号表 符号表的作用 概括地说,一张符号表的每一项(或称入口)包含两大栏 (或称区段,字域),即名字栏和信息栏。表格的形式是: 名字栏 信息栏 (NAME) (INFORMATION) 第1项(入口1) 第2项(入口2) 第n项(入口n) 第5页
编译原理 第5页 符号表 符号表的作用 概括地说,一张符号表的每一项(或称入口)包含两大栏 (或称区段,字域),即名字栏和信息栏。表格的形式是:
编译原理 符号表 对于编译程序的符号表来说,它所涉及的基本操作大致可归纳为五类: 1.对给定名字,确定此名是否在表中; 2.填入新名; 3.对给定名字,访问它的有关信息; 4.对给定名字,填写或更新它的某些信息; 5.删除一个或一组无用的项。 雪不同种类的表格所涉及的操作往往也是不同的。上述五方面只是一些基本 的共同操作。 第6页
编译原理 第6页 符号表 对于编译程序的符号表来说,它所涉及的基本操作大致可归纳为五类: 1.对给定名字,确定此名是否在表中; 2.填入新名; 3.对给定名字,访问它的有关信息; 4.对给定名字,填写或更新它的某些信息; 5.删除一个或一组无用的项。 不同种类的表格所涉及的操作往往也是不同的。上述五方面只是一些基本 的共同操作
编泽原理 符号表 符号表的组织方式 售符号表最简单的组织方式是让各项各栏所占的存储单元的长 度都是固定的。这种项栏长度固定的表格易于组织、填写和 查找。对于这种表格,每一栏的内容可直接填写在有关的区 段里。例如,有些语言规定标识符的长度不得超过8个字符, 于是,我们就可以用两个机器字作为主栏(假定每个机器字 可容四个字符)每个名字直接填写在主栏中。若标识长度不 到8个字符,则用空白符补足。 第7负
编译原理 第7页 符号表 符号表的组织方式 符号表最简单的组织方式是让各项各栏所占的存储单元的长 度都是固定的。这种项栏长度固定的表格易于组织、填写和 查找。 对于这种表格, 每一栏的内容可直接填写在有关的区 段里。例如,有些语言规定标识符的长度不得超过8个字符, 于是,我们就可以用两个机器字作为主栏(假定每个机器字 可容四个字符)每个名字直接填写在主栏中。若标识长度不 到8个字符, 则用空白符补足
编译原理 符号表 慧这种直接填写式的表格形式如下 NAMe INFORMATION SAMPLE WEIGHT 第影8觉
编译原理 第8页 符号表 这种直接填写式的表格形式如下
编泽原理 符号表 但是,有许多语言对标识符的长度几乎不加限制,或者说, 标识符的长度范圃基 组成字。女过抗、瑞2不多任 取长可容许由100个字符 则势必会大量浪费存储空间。因此,最好用二个独立的字符 串数组。 把所有标识符都存放在其中。在符号表的羊栏放一 不指祟器和尺整教。的指宗器指盐标识待程字符里数望中的 位置; 整数代表茈标识符的长度。这样,苻号美的结构就奶 下图所示: NAME INFORMATION 。.6 LOOPSAMPLEWEIGHT 字符串数组 第第9列
编译原理 第9页 符号表 但是,有许多语言对标识符的长度几乎不加限制,或者说, 标识符的长度范围甚宽。 譬如说,最长可容许由100个字符 组成的名字。在这种情况下,如果每项都用25个字作主栏, 则势必会大量浪费存储空间。因此,最好用一个独立的字符 串数组,把所有标识符都存放在其中。在符号表的主栏放一 个指示器和一个整数。指示器指出标识符在字符串数组中的 位置;整数代表此标识符的长度。这样,符号表的结构就如 下图所示:
编泽原理 符号表 编译开始时,符号表或者是空的,或者预先存放了 一些保留字和标准函数名的有关项。在整个编译过程 中,符号表的查填频率是非常高的。编译工作的相当 一大部分时间是花费在查填符号表上。所以,研究表 格结构和查填方法是一件非常重要的事情。下面,我 们简略地介绍几种一般的表格构造法和查填法。 第0贡
编译原理 第10页 符号表 编译开始时,符号表或者是空的,或者预先存放了 一些保留字和标准函数名的有关项。在整个编译过程 中,符号表的查填频率是非常高的。编译工作的相当 一大部分时间是花费在查填符号表上。所以,研究表 格结构和查填方法是一件非常重要的事情。下面,我 们简略地介绍几种一般的表格构造法和查填法