文档介绍:第九章符号表
11/11/2017
1
【课前思考】
◇回顾第一章介绍的编译过程,理解符号表在编译过程中的位置和作用。
◇PL/0编译程序的符号表是怎样组织的?它都登录了名字的哪些属性信息?
◇程序设计语言中“变量的作用域和可见性”是什么含义?
◇高级语言语句的结构和低级语言结构的不同。
11/11/2017
2
【学习目标】
符号表作为编译系统的重要设施,贯穿于文法分析、检查和语义处理的编译全过程。
本章目的:通过学习深刻全面地了解符号表的地位和作用;掌握符号表的组织和管理方法;以及编译过程中符号表的操作活动过程。
11/11/2017
3
【学习指南】
符号表在编译全过程的地位和作用非常重要,是用来存放源程序中出现的有关名字的属性信息,这些信息集中反映了名字的语义特征属性,是进行上下文合法性检查和语义处理及代码生成的依据。
符号表总体结构的设计和实现是与源语言的复杂性(包括词法结构、语法结构的复杂性)有关,还与对于编译系统在时间效率和空间效率方面的要求有关。
11/11/2017
4
【难重点】
◇符号表总体组织的选择原则;
◇变量的类型和存储类别等属性的重要性;
◇采用单表结构时,如何解决分程序构造中同名名字声明的可视性规则;采用分表结构适合哪种语言的编译系统。
11/11/2017
5
【知识结构】
11/11/2017
6
在编译程序中,符号表被利用来存放应用程序中出现的有关的标识符的属性信息。
主要具有以下功能:
符号表的作用和地位
11/11/2017
7
1、收集符号属性:编译程序根据标识符在说明部分的说明信息,收集有关标识符的属性,并在符号表中建立符号的相应属性信息;
2、上下文语义的合法性检查的依据:对于同一个标识符在程序中的多个地方出现的,而有关该符号的属性是在不同情况下收集的,需要检查此标识符属性在上下文中的一致性问题;
3、作为目标代码生成阶段地址分配的依据:程序语言中的符号变量,在目标代码生成时,要确定其在存储分配时的位置,此位置是由符号变量被定义时的存储类别或被定义的位置决定的,因此,首先要确定其被分配的区域,其次是变量出现的顺序。
11/11/2017
8
1、符号名
一个标识符可以是变量、标号、函数和过程等的名字,一般来说,它要能唯一的代表了这些对象(但有的程序语言允许函数或过程的重载,重载的类型与同名的对象不能相同,如C语言)。
符号的主要属性及作用
11/11/2017
9
2、符号的类型
除了过程之外,函数和变量的符号都有类型属性。符号的类型是在程序语言中该符号的定义中得到的,决定了符号的存放格式和允许进行的操作类型。
符号的类型通常是某种程序语言提供的基本类型,或是用户根据需要对基本数据类型进行组合的类型。
11/11/2017
10