第六章 符号表管理技术
文章目录
6.1 概述
符号表:在编译过程中,编译程序用来记录源程序中各种名字的特性信息,所以也称为名字特性表。
名字:程序名、过程名、函数名、用户定义类型名、变量名、常量名、枚举值名、标号名等。
特性信息:上述名字的种类、类型、维数、参数个数及目标地址(存储单元地址)等。
符号表在编译过程中的作用:
源程序中变量要先声明,然后才能引用。
声明语句中,声明各种名字,给出类型维数等信息,编译时将这些信息登录到符号表中,并给变量分配存储单元,存储单元地址也登录在符号表中。
当编译到引用所声明的变量(赋值或引用其值)时,要进行语法语义正确性检查和生成相应的目标程序,需要查符号表以取得相关信息。

有关符号表的操作:填表和查表
填表:说明或定义语句中的名字、与之有关的信息填入符号表中。
查表:
-
填表前查表,检查同一作用域内名字是否重复定义
-
检查名字种类是否与说明一致
-
强类型语言中,表达式中各变量的类型是否一致
强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了,强类型语言包括Java、.net 、Python、C++等语言。
-
生成目标指令时,要去的所需要的地址
6.2 符号表的组织与内容
6.2.1 符号表的结果与内容

“名字”域:存放名字。一般为标识符的符号串,也可为指向标识符字符串的指针。
“特性”域:可包括多个子域,分别表示标识符的有关信息。如:
-
名字(标识符)的种类:简单变量、函数、过程、数组、标号、参数等
-
类型:如整型、浮点型、字符型、指