第六章 符号表管理与语义分析 155 是在编译程序的工作过程中,建立并保持一系列的表格,如常数表、变量名表、数 组名表、过程名表以及标号表等,习惯上将它们统称为符号表或名字表。符号表的 每一登记项,将填入名字标识符以及与该名字相关联的一些信息。这些信息,全面 的反映各个符号的属性及它们在编译过程中的特征,诸如名字的种属(常数、变量、 数组、标号等),名字的类型(整型、实型、逻辑型、字符型等),名字的特征(当 前是定义性出现还是使用性出现等),给该名字分配的存储单元地址以及与该名字的 语义有关的其他信息等等。符号表中的各类信息将在编译程序工作过程中的适当时 候填入。对在语义分析阶段建造符号表的编译程序,当遇到标识符声明部分时,每 当遇到一个名字声明,就以此名字查符号表;若表中无此登记项,则将该名字填入 表中;若该表中已有此登记项,则说明该名字是重复声明,报告语义错误。至于与 该名字相关的一些信息,可视工作的方便,分别在编译程序工作过程中的适当时候 填入:种属,类型,特征等信息可在语义分析阶段完成;名字的存储地址等信息则 要在代码生成阶段完成。几乎在编译程序工作的全部过程中,都需要对符号表进行 频繁的访问,查表和填表等操作,是编译程序的一笔很大的开销。因此,合理地组 织符号表,并相应地选择好查表和填表的方法,是提高编译程序工作效率的重要一 环。 6.2.1 符号表的内容 一般而言,即使对于同一类符号表,例如变量名表,它的结构以及表中的每一 登记项所包含的内容,由于程序设计语言和目标计算机的不同,都可能有较大差异。 然而抽象地看,各类符号表一般都具有如表 6.1 所示的形式。由表 6.1 可以看出,符 号表的每一记录项都由两个数据项组成:第一个数据项为名字,用来存放标识符; 第二个数据项为信息,一般由若干子项(或域)组成,用来记录与该名字相对应的 各种属性和特征。 名字项 信息项 Name1 Name1_info Name2 Name2_info …… …… Namen Namen_info 表 6.1 符号表的结构 对于标识符的长度有限制或长度变化范围不大的语言而言,每一登记项名字栏 的大小可以取标识符的 大允许长度。例如,SNL 语言规定每个标识符 多可包含 10 个字符,因此可用 10 个字符的空间作为名字栏的长度。 在源程序中,由于不同种属的标识符起着不同的作用,因而相应于各类标识符 所需记录的信息也就可能有很大的差异。如果根据标识符的不同种属,在编译程序 中分门别类地组织多种表格,如常数表、变量名表、数组名表、过程名表、标号表 等等,对于表格的使用将非常方便。但是,如果能合理组织符号表信息项各个子项 所存信息的内容(例如适当地增加标志位),则在编译程序中为各类标识符设置一张
2021-09-16 11:38:59 3.02MB 编译原理,SNL语言
1
海浪模型的matlab代码桑迪亚国家实验室-极端海州轮廓(SNL-ESSC) 抽象的 生成描述极端海洋状态的环境轮廓作为数值或物理模型模拟的输入,这是当前设计用于承受极端海洋状态的海洋结构的标准实践的一部分。 这些环境等高线的特征在于有效波高(Hs)与能量周期(Te)或峰值周期(Tp)值的组合,这些值是使用基于后验模拟或在足够长的时间内的浮标观测值的一组数据针对给定的重复间隔计算的记录。 逆一阶可靠性方法(I-FORM)的使用是生成环境轮廓的标准设计实践。 本文在开发I-FORM之前开发了增强的数据分析方法,包括使用主成分分析(PCA)创建所考虑变量的不相关表示形式以及新的分布和参数拟合技术。 这些修改更好地代表了测得的数据,因此,应有助于更极端地表现出极端海况的环境轮廓,以便确定海洋结构的设计载荷。 参考 下文描述了此代码中实现的方法。 如果您在工作中使用“极端海州轮廓”代码,我们请您引用本文: [1] Aubrey C. Eckert-Gallup,CédricJ. Sallaberry,Ann R. Dallman,Vincent S. Neary,“主成分分析(PCA)的应用和
2021-09-03 10:11:53 101KB 系统开源
1
SNL词法+语法分析的java实现,其中语法分析采用了递归下降的方式。
2021-06-11 14:46:57 164KB 编译原理
1
SNL编译器的网页版本,可以实现词法分析,语法分析并画出语法树,语义分析等等
2021-05-22 11:33:27 10.66MB SNL 编译器
1
该程序包含词法分析,语法分析(LL1和递归下降),语义分析,会生成token,抽象树和符号表
2021-04-29 09:02:47 142.73MB 编译器 SNL
1
学校SNL语言的编译器java实现,包括词法分析,语法分析,语义分析。有程序界面,非命令行操作。
2021-04-22 22:38:34 74KB SNL 编译器 java
1
基于snl语言的编译器 源代码 希望对编译器的开发者有帮助
2021-04-19 23:23:57 1.29MB snl语言 编译器
1
SNL语言是我们学校为了方便编译原理教学而自定义的一门类pascal编程语言.这门语言主要特点是支持过程的嵌套声明,支持纪录(类似于C中的结构体),支持数组类型,支持字符类型,支持无符号整数类型。有基本的条件判断语句,循环语句。对于过程而言,定义了传址类型的参数(类似于C++的引用类型)。 我已经完整实现了从词法分析一直到中间代码/目标代码生成的完整的编译器功能。 由于大量采用了软件工程的编程思想。每个工程的源代码组织结构相当清晰,思路较为明朗。这都是十分值得借鉴的。
2021-04-06 09:40:25 8.87MB SNL语言 编译器
1
自己编写的SNL词法分析程序,用于课程设计,代码量不少,运用了编译原理的重要原理。
2021-04-05 20:46:15 439KB SNL 词法分析 C++
1
SNL语言是我们学校为了方便编译原理教学而自定义的一门类pascal编程语言.这门语言主要特点是支持过程的嵌套声明,支持纪录(类似于C中的结构体),支持数组类型,支持字符类型,支持无符号整数类型。有基本的条件判断语句,循环语句。对于过程而言,定义了传址类型的参数(类似于C++的引用类型)。 我已经完整实现了从词法分析一直到中间代码/目标代码生成的完整的编译器功能。 由于大量采用了软件工程的编程思想。每个工程的源代码组织结构相当清晰,思路较为明朗。这都是十分值得借鉴的。
2021-03-29 15:43:48 3.27MB SNL语言 编译器 VC6.0
1