编译原理 符号表管理技术

本文详细探讨了编译过程中符号表管理技术,包括符号表的作用、组织方式和内容,以及针对非分程序和分程序结构语言的符号表组织策略。符号表用于记录源程序中名字的特性信息,如类型、地址等,对于语法和语义检查至关重要。不同的语言结构要求不同的符号表组织,如统一符号表、分类型符号表和折中办法。此外,还介绍了不同类型的查表方法,如无序、有序和散列符号表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第六章 符号表管理技术

6.1 概述

符号表:在编译过程中,编译程序用来记录源程序中各种名字的特性信息,所以也称为名字特性表。

名字:程序名、过程名、函数名、用户定义类型名、变量名、常量名、枚举值名、标号名等。

特性信息:上述名字的种类、类型、维数、参数个数及目标地址(存储单元地址)等。

符号表在编译过程中的作用:

源程序中变量要先声明,然后才能引用

声明语句中,声明各种名字,给出类型维数等信息,编译时将这些信息登录到符号表中,并给变量分配存储单元,存储单元地址也登录在符号表中。

当编译到引用所声明的变量(赋值或引用其值)时,要进行语法语义正确性检查生成相应的目标程序,需要查符号表以取得相关信息。

有关符号表的操作:填表和查表

填表:说明或定义语句中的名字、与之有关的信息填入符号表中。

查表:

  • 填表前查表,检查同一作用域内名字是否重复定义

  • 检查名字种类是否与说明一致

  • 强类型语言中,表达式中各变量的类型是否一致

    强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了,强类型语言包括Java、.net 、Python、C++等语言。

  • 生成目标指令时,要去的所需要的地址

6.2 符号表的组织与内容

6.2.1 符号表的结果与内容

“名字”域:存放名字。一般为标识符的符号串,也可为指向标识符字符串的指针。

“特性”域:可包括多个子域,分别表示标识符的有关信息。如:

  • 名字(标识符)的种类:简单变量、函数、过程、数组、标号、参数等

  • 类型:如整型、浮点型、字符型、指

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值