U5 符号表管理

文章目录

  • 一、语义分析
    • 1、任务
  • 二、符号表
    • 1、概述
    • 2、操作
    • 3、基本结构
    • 4、组织方式
  • 三、非分程序的符号表
    • 1、概念
    • 2、标识符的作用域及基本处理办法
    • 3、符号表的组织方式
  • 四、分程序的符号表:处理作用域嵌套
    • 1、概念
    • 2、处理方法
  • 五、栈式符号表
  • 六、基于符号表的存储组织与管理
    • 1、运行时的存储组织及管理
    • 2、静态存储分配和动态存储分配
    • 3、静态存储分配策略

一、语义分析

1、任务

对识别出的各种语法成分进行语义分析(理解意思),并产生相应的中间代码。

  1. 上下文有关分析:即标识符的作用域 (Scope)
    子需求:标识符要先声明,再使用。
    这是上下文有关分析
  2. 类型的一致性检查 (Type Checking)
  3. 语义处理
    声明语句:其语义是声明变量的类型等,并不要求做其他的操作。
    编译程序的工作是填符号表,登录名字的特征信息,分配存储。
    执行语句:语义是要做某种操作。
    语义处理的任务:按某种操作的目标结构生成中间代码

上下文无关文法只能描述语言的语法结构,而不能描述其语义。因此语法分析不能解决上述问题

二、符号表

1、概述

目的:解决Scope问题
概念:在编译过程中,编译程序用来记录源程序中各种名字的特性信息, 所以也称为名字特性表。
重要性:建表和查表的必要性 (符号表在编译过程中的作用)
源程序中变量要先声明,再引用

  1. 用户通过声明语句,声明各种名字,并给出它们的类型、维数等信息
    编译程序在处理这些声明语句时,将声 明中的名字及其信息登录到符号表中,同时给变量分配存储单元,并将储单元地址登录在符号表中
  2. 当编译程序编译到引用所声明的变量时(赋值或引用其值),要进行语法语义正确性检查(类型是否符合要求)和生成相应的目标程序,这就需要查符号表以取得相关信息

2、操作

  1. 填表
    当分析到程序中的说明或定义语句时,将说明或定义的名字,以及与之有关的信息填入符号表中。
  2. 查表
    填表前查表,检查在程序的同一作用域内名字是否重复定义。
    检查名字的种类是否与说明一致。
    对于强类型语言,要检查表达式中各变量的类型是否一致;
    生成目标指令时,要取得所需要的地址。

3、基本结构

  1. “名字”域: 存放名字,一般为标识符的符号串,也可为指向标识符字符串的指针
  2. “特性”域: 可包括多个子域 , 分别表示标识符的有关信息,如
    名字(标识符)的种类:简单变量、函数、过程、数组、标号、参数等
    类型:如整型、浮点型、字符型、指针等
    性质:变量形参、值形参等
    值: 常量名所代表的数值
    地址:变量所分配单元的首址或地址位移
    大小:所占的字节数
    作用域的嵌套层次

4、组织方式

  1. 统一符号表:不论什么名字都填入统一格式的符号表中
    符号表表项应按信息量最大的名字设计,填表、查表比较方便, 结构简单, 但是浪费大量空间。
  2. 对于不同种类的名字分别建立各种符号表
    节省空间, 但是填表和查表不方便。
  3. 折中办法:大部分共同信息组成统一格式的符号表,特殊信息另设附表,两者用指针连接。

三、非分程序的符号表

1、概念

每个可独立进行编译的程序单元是一个不包含有子模块的单一模块,如FORTRAN语言。
在这里插入图片描述

2、标识符的作用域及基本处理办法

  1. 作用域: 全局:子程序名,函数名和公共区名。 局部: 程序单元中定义的变量。
  2. 符号表组织
    在这里插入图片描述
  3. 基本处理办法
    子程序、函数名和公共区名填入全局符号表。
    在子程序(函数)声明部分读到标识符,造局部符号表。
    在这里插入图片描述
    在语句部分读到标识符,查表。
    在这里插入图片描述
    程序单元结束: 释放该程序单元的局部符号表。
    程序编译完成: 释放全部符号表。

3、符号表的组织方式

无序符号表: 按扫描顺序建表,查表要逐项查找。
有序符号表:符号表按变量名进行字典式排序。
散列符号表(Hash表):符号表地址 = Hash(标识符) 需要解决冲突

四、分程序的符号表:处理作用域嵌套

1、概念

分程序结构语言:模块内可嵌入子模块。
标识符的作用域和基本处理方法:

  1. 作用域:标识符局部于所定义的模块(最小模块)
    模块中所定义的标识符作用域是定义该标识符的子程序
    过程或函数说明中定义的标识符(包括形参)其作用域为本过程体
    在这里插入图片描述

2、处理方法

  1. 在程序声明部分读到标识符时(声明性出现),建表
    在这里插入图片描述
  2. 在语句中读到标识符(引用性出现),查表:
    在这里插入图片描述
    例子:
    在这里插入图片描述

五、栈式符号表

在这里插入图片描述
在这里插入图片描述
当过程和函数体编译完成后,应将与之相应的参数名和局部变量名以及后者的特性信息从符号表中删去。
要求:给出一段程序,会画出其栈式符号表。

六、基于符号表的存储组织与管理

1、运行时的存储组织及管理

目标程序运行时所需存储空间的组织与管理以及源程序中变量存储空间的分配
在这里插入图片描述

2、静态存储分配和动态存储分配

  1. 静态存储分配:
    在编译阶段由编译程序实现对存储空间的管理和为源程序中的变量分配存储的方法。
    如果在编译时能够确定源程序中变量在运行时的数据空间大小,且运行时不改变,那么就可以采用静态存储分配方法。
  2. 动态存储分配
    在目标程序运行阶段由目标程序实现对存储空间的组织与管理,和为源程序中的变量
    分配存储的方法。
    在目标程序运行时进行变量的存储分配。 编译时要生成进行动态分配的目标指令

3、静态存储分配策略

由于每个变量所需空间的大小在编译时已知,因此可以用简单的方法给变量分配目标地址。
开辟一数据区。(首地址在加载时定)
按编译顺序给每个模块分配存储空间。
在模块内部按顺序给模块的变量分配存储,一般用相对地址,所占数据区的大小由变量类型决定。
目标地址填入变量的符号表中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/237862.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Appilied energy论文复现:计及光伏电站快速无功响应特性的分布式电源优化配置方法程序代码!

本程序参考Applied energy论文《Optimal siting and sizing of distributed generation in distribution systems with PV solar farm utilized as STATCOM (PV-STATCOM)》,文中主要对光伏电站、微燃机等分布式电源进行优化配置,程序较为简单和基础&…

SD生成的图像不清晰,如何解决

文生图 选择高清修复: 几点注意 重绘幅度:这里不用太高,他会根据你生成的低分辨率图像,生成高分辨率的图像,可以选择0.3~05之间,给AI跟多想象力空间可以选择0.5 ~ 0.7。太低边缘模糊,太高了可能…

《数字图像处理-OpenCV/Python》连载(56)图像的灰度直方图

《数字图像处理-OpenCV/Python》连载(56)非线性灰度变换 本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 第 8 章 图像的直方图处理 图像的直方图是反映像素值…

约瑟夫问题

目录 方法一:数组模拟 方法二:链表模拟 方法三:数学递归 约瑟夫问题: 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。下一个人继续从 1 开始报数。 n-1 轮结束以后,只剩下…

人人都能用的AI编程助手 CodeGeeX

视频版:人人都能用的Ai编程助手——CodeGeeX 大家好,我是凌览。 现在距离 AI 大火已经快有一年啦,作为程序员可不得准备一款AI帮咱们干点活。本文分享一款 AI 工具 CodeGeeX,帮助大家提高一波学习和工作效率。 CodeGeeX 是什么…

Linux之Apache服务器安装及配置

一、Apache服务器简介 Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用。Apache曾经是世界使用排名第一的Web服务器软件&#xf…

strict-origin-when-cross-origin

严格限制同源策略 (1)允许服务器的同源IP地址访问 (2)允许Referer --- 后端服务器要配置

两线制 4-20mA 隔离变送器(输出回路供电)

两线制 4-20mA 隔离变送器(输出回路供电) 特征: ◆低成本,小体积,符合 UL94-V0 阻燃标准 ◆安装方式采用国际标准 DIN35mm 导轨安装方式 ◆双隔离(信号输入、信号输出相互之间 3000VDC 隔离) ◆4-20mA 电流输入与输出,精度高(失真…

ansible部署安装Tomcat

我们需要用到的文件jdk以及tomcat安装包 下载链接:https://pan.baidu.com/s/1sjG8Yl8k-SUbOv7KwKXZMA 提取码:t71z 准备n台机器(我这里就简单部署三台机器) ansible的安装部署以及配置可以看博主之前的文章自动化运维工具-ansible部署 ansib…

zookeeper高级应用原理

文章目录 分布式锁分布式锁-读写锁分布式锁-Curator实现ZK集群管理 zookeeper 集群zookeeper 集群节点个数配置zookeeper 选举ZAB协议zookeeper 选举zookeeper 集群数据读写 分布式锁 分布式锁:在分布式环境下,保护跨进程、跨主机、跨网络的共享资源&am…

Day57力扣打卡

打卡记录 最小体力消耗路径 链接 Dijkstra 将Dijkstra算法从计算最短路径转化为计算路径最大差值。 class Solution:def minimumEffortPath(self, heights: List[List[int]]) -> int:n, m len(heights), len(heights[0])dist [0] [0x3f3f3f3f] * (n * m - 1)vis set…

iPhone 数据恢复:iMyFone D-Back iOS

iMyFone D-Back iOS 最佳 iPhone 数据恢复,最好的 iPhone 数据恢复软件,恢复成功率最高。 直接从iOS设备、iTunes/iCloud/第三方程序备份快速恢复数据。 有选择地恢复已删除的照片、WhatsApp、消息和 18 多种其他数据类型。 仅通过 iCloud 帐户访问即可从…

【组合数学】递推关系

目录 1. 递推关系建立2. 常系数齐次递推关系的求解3. 常系数非齐次递推关系的求解4. 迭代法 1. 递推关系建立 给定一个数的序列 f ( 0 ) , f ( 1 ) , . . . , f ( n ) , . . . , f (0), f(1), ..., f(n ),... , f(0),f(1),...,f(n),..., 若存在整数 n 0 n_0 n0​ &#xff…

启动jar包命令

一、Windows环境 找到jar包的位置; 按shift键,点击鼠标右键,选中在此处打开PowerShell窗口; 此时进入命令行工具 输入java -jar .\java_web-0.0.1-SNAPSHOT.jar(注意空格)。 二、Linux环境 2.1 方式一 …

【二者区别】cuda和cudatoolkit

Pytorch 使用不同版本的 cuda 由于课题的原因,笔者主要通过 Pytorch 框架进行深度学习相关的学习和实验。在运行和学习网络上的 Pytorch 应用代码的过程中,不少项目会标注作者在运行和实验时所使用的 Pytorch 和 cuda 版本信息。由于 Pytorch 和 cuda 版…

【JVM从入门到实战】(二)字节码文件的组成

一、Java虚拟机的组成 二、字节码文件的组成 字节码文件的组成 – 应用场景 字节码文件的组成部分-Magic魔数 什么是魔数? Java字节码文件中的魔数 文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。…

用23种设计模式打造一个cocos creator的游戏框架----(十三)模板方法模式

1、模式标准 模式名称:模板方法模式 模式分类:行为型 模式意图:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 结构图&#xff1a…

【ArcGIS Pro微课1000例】0053:基于SQL Server创建与启用地理数据库

之前的文章有讲述基于SQL Server创建企业级地理数据库,本文讲述在SQL Server中创建常规的关心数据库,然后在ArcGIS Pro中将其启用,转换为企业级地理数据库。 1. 在SQL Server中创建数据库** 打开SQL Server 2019,连接到数据库服务器。 展开数据库连接,在数据库上右键→新…

使用Android Studio的Gradle Tasks对源码生成jar包

一. 前言 As工具可以用来编译第三方源码(比如okhttp ,retrofit源码), 用于打jar包或aar包,使用工具自带的Tasks工具可以帮忙我们完成这些事情。 二. 遇到问题 Android Studio Gradle打包Tasks不显示,如图…

销售技巧培训之如何提升房地产销售技巧

在房地产销售这个竞争激烈的行业中,要想获得成功,不仅需要熟练掌握销售技巧,还需要不断地提升自己的能力。下面,我们将从以下几个方面探讨如何提升房地产销售技巧。 一、了解客户需求 倾听客户:在与客户沟通时&#x…