符号表简介

合集下载

数学符号表_数学符合的意思_数学符号代表的意义_数学符号用法

数学符号表_数学符合的意思_数学符号代表的意义_数学符号用法

数学符号表数学上,有一组常在数学表达式中出现的符号。

数学工作者熟悉这些符号,不是每次使用都加以说明。

所以,对于数学初学者,下面的列表给出了很多常见的符号包括名称、读法和应用领域。

另外,第三栏有一个非正式的定义,第四栏有个简单的例子。

注意,有时候不同符号有相同含义,而有些符号在不同的上下文中有不同的含义。

6 + 3 表示 6 加 3。

6 + 3 = 9加算术6 − 3 表示 6 减 3。

6 − 3 = 3减算术−3 表示 3 的负数。

−(−5) = 5负算术A −B 表示包含所有属于 A 但不属于 B 的元素的集合。

{1,2,4} − {1,3,4} = {2}减集合论6 × 3 表示 6 乘以 3。

6 × 3 = 18乘以算术X × Y 表示所有第一个元素属于 X ,第二个元素属于 Y 的有序对的集合。

{1,2} × {3,4} = {(1,3),(1,4),(2,3),(2,4)}集合论u × v 表示向量 u 和 v 的向量积。

(1,2,5) × (3,4,−1) = (−22, 16, − 2)向量积向量代数6 ÷ 3 或 6 / 3 表示 6 除以 3 或 3 除 6。

6 ÷ 3 = 212/4 = 3除以算术表示其平方为 x 的正数。

实数若用极坐标表示复数 z = r exp(i φ)(满足 -π < φ ≢ π),则 √z = √r exp(i φ/2)。

复数|x | 表示实数轴(或复平面)上 x 和 0 的距离。

|3| = 3, |-5| = |5| |i | = 1, |3+4i | = 5数n ! 表示连乘积 1×2×…×n 。

4! = 1 × 2 × 3 × 4 = 24…的阶乘组合论X ~ D 表示随机变量 X 概率分布为 D 。

编译原理符号表的应用

编译原理符号表的应用

编译原理符号表的应用1. 什么是编译原理符号表编译原理中的符号表是一种数据结构,用于记录程序中各个符号的相关信息,包括变量名、函数名、常量等。

在编译过程中,符号表起着重要的作用,可以进行词法分析、语法分析和语义分析等过程中的变量和函数的命名检查、重名检查以及类型检查等功能。

2. 符号表的组织结构符号表可以采用不同的组织结构,最常见的有线性表、散列表和树等。

下面列举了几种常见的符号表组织结构:•线性表:符号表可以通过数组或链表等数据结构来表示。

•散列表:采用散列函数对符号进行映射,能够快速地查找符号。

•树:符号表可以用二叉搜索树、AVL树或红黑树等数据结构来表示,支持快速的查找、插入和删除操作。

3. 符号表在编译过程中的应用符号表在编译过程中扮演着重要的角色,下面介绍了符号表在不同阶段的应用:3.1 词法分析阶段在词法分析阶段,编译器通过符号表来记录程序中出现的各个标识符的信息,包括变量名、函数名和常量等。

符号表可以用来进行标识符的重名检查,以及维护标识符的属性信息,比如变量的类型、作用域和内存地址等。

3.2 语法分析阶段在语法分析阶段,编译器需要判断语法是否正确,并生成语法树。

符号表在此阶段可以用来进行各种类型的语法检查,比如检查函数参数的类型、检查类型转换的合法性等。

符号表还可以用来维护函数的参数表和局部变量表等信息。

3.3 语义分析阶段在语义分析阶段,编译器需要对代码进行语义检查,包括类型检查、作用域检查等。

符号表是进行这些检查的重要依据,通过符号表可以判断变量是否被定义、变量的作用域和类型是否匹配等。

3.4 中间代码生成阶段在中间代码生成阶段,编译器需要将源代码转换成中间代码,符号表可以用来生成中间表示时的参考依据。

符号表可以用来维护中间变量的属性信息,并生成中间代码时进行类型转换的判断。

3.5 代码优化和目标代码生成阶段在代码优化和目标代码生成阶段,符号表可以用来进行变量的寄存器分配和内存分配等操作。

编译原理符号表

编译原理符号表

编译原理符号表符号表是编译器中一个非常重要的数据结构,用于存储程序中的标识符(如变量、函数名等)和对应的属性信息(如数据类型、作用域等)。

在编译器的各个阶段,都需要使用符号表来进行词法分析、语法分析、语义分析等操作,因此符号表设计的好坏直接影响到编译器的质量和效率。

一般来讲,符号表可以被看作是一个以标识符为键、以属性信息为值的映射表。

在编译器的词法分析阶段,源代码中的每个标识符都会被扫描并加入符号表中,同时为每个标识符生成一个唯一的“id”(也称为“符号表条目”)作为在后续处理中访问符号表的索引。

在编译器的语法分析和语义分析阶段,编译器会利用符号表进行语法分析和语义检查。

例如,在语法分析阶段,编译器需要判断变量是否被正确声明和使用,因此需要在符号表中查找变量的属性信息;而在语义分析阶段,编译器需要对表达式进行类型检查或者函数调用进行参数匹配,因此也需要在符号表中查找相关的属性信息。

需要注意的是,符号表的实现需要考虑到标识符的作用域、重复定义、名称空间等问题。

一般来说,编译器需要支持不同作用域之间的变量共存和访问,因此需要为不同的作用域维护不同的符号表。

当在一个新作用域中遇到相同的标识符时,编译器应该创建新的符号表条目;而在同一作用域中出现重复定义时,编译器应该抛出错误信息。

同样需要注意的是,符号表的实现也需要考虑到数据结构的效率和空间占用。

一些常用的实现方式包括基于哈希表的实现、基于树的实现(如平衡树、二叉查找树等)等。

在编译器优化阶段,符号表的实现也会影响编译器生成的目标代码的质量和效率。

例如,在常量表达式优化中,编译器使用符号表来维护常量的值和类型信息,从而可以直接进行常量表达式的求值,而不必在运行时才计算。

总的来说,在编译器中,符号表是一个极其重要的数据结构,对于编译器的性能和代码质量有着重要的影响。

因此,在设计和实现编译器时,需要认真考虑符号表的性能和可扩展性,并且根据具体的编程语言特性进行相应的优化。

符号表

符号表
符号表(Symbol Table) 第六章 符号表
• 作用:记录源程序中各种名字的属性和
特征等有关信息。 • 内容:名字,有关信息(属、类型等) • 表项的建立: • 运用:语义检查、产生中间代码、地址 分配的依据
6.1 符号表的作用
在编译的各个阶段,每当遇到名字时, 都要查找符号表。 因此,合理组织符号表,使其占用的存储 空间较少、易于访问,对提高编译的效 率很重要。
(名字,所在过程编号) • 例如,Pascal(嵌套结构型语言) 的符号 表组织:每当近入一层过程时,要为在 此过程中新说明的标识符建立一张子符 号表。
6.5 符号表的内容
• 符号表的信息栏中记录了每个名字的有
关性质,如类型、种属、大小、以及相 对数等。 • 不同的程序语言对于名字性质的定义各 有不同。 • 一个名字的有关信息常常是分几次填入 信息栏中的。 • 符号表中信息栏的具体组织取决于所翻 译的具体的源语言和目标机器。
• 符号表的表项包括名字栏和信息栏 查填符号表一般通过匹配名字来实现。 对符号表的操作一般有: • 对给定的名字,查询其是否已在表中; • 添加新名字; • 访问某个名字的某些信息; • 填加或更新某个名字的某些信息; • 删除一个或一组无用的项。
6.2 符号表的组织方式
最简单方式:表中各项各栏的长度固定。 间接方式:符号表中的相应栏存指针,指向 存储具体信息的位置。 符号表
的作用域范围。如,嵌套过程中说明的 名字,其作用范围局限于该过程。因此, 同一个标识符在不同的地方可能被说明 为标志不同的对象,具有不同的性质, 要求分配不同的存储空间。 • 作用域分析:使得标识符在不同的作用 域得到正确的引用。
最近嵌套作用域规则: 最近嵌套作用域规则:
• 过程中的局部变量的名字是一个二元组

第九章符号表

第九章符号表

NAME:P KIND:PROCEDUR LEVEL:LEV ADR: SIZE:4
NAME:G KIND:VARIABLE LEVEL:LEV+1 ADR:DX
…… ……
……
第九章符号表
……
9.1 符号表的作用和地位
1. 收集符号属性
在编译程序分析标识符说明部分时,收集有
关标识符的属性,在符号表中建立符号的相
位置的属性信息。 出现先后次序、存储区表头相对位移量。
第九章符号表
符号属性(信息)
6. 符号的其它属性: (1) 数组内情向量 (2) 记录结构型的成员信息 成员所占存储空间、排列次序 (3) 函数及过程的形参 每个函数或过程的形参个数、排列次序、形
参的类型。
第九章符号表
9.3 符号表的组织
第三种:折衷方式,根据符号属性相似程度 分类组织成若干张表,每张表中记录的符号 都有比较多的相同属性。
第九章符号表
9.3.2 符号表项的排列
符号表作为一个多元组,表中元组的排列组 织是构造符号表的重要成分。
在编译程序的整个工作过程中,符号表被频 繁地用来建立表项,找查表项,填充和引用 表项的属性。因此表项的排列组织对该系统 运行的效率起着十分重要的作用。
符号表的作用和地位
3. 作为目标代码生成阶段地址分配的依据 在目标代码生成阶段,当对符号名进行地址
分配时,符号表是地址分配的依据。 对一个多遍扫描的编译程序,不同遍所用的
符号表也往往各有不同,因为每遍所关心的 信息各有差异。
第九章符号表
9.2 符号表的主要属性和作用
不同的语言定义的标识符属性不尽相同,但 以下几种通常都是需要的:
保留字表和运算符表:找到后转换为内码 标识符表:找到—已登录;未找到—登录 查找算法:顺序、折半、散列

符号表

符号表

6
构造符号表的算法
1.初始化: CURRBL =0; LASENT=0; LASTBL=0; TOPENT=0; /*注:以上各量 在下面的程序中分别简记为 CB,LE,LT,TE*/ 2.(1)当进入分程序的首符号或 过程时: B[++LT].OUTERN=CB; B[LT].ECOUNT=0; B[LT].POINTER=TE; CB=LT; (2) 遇到分程序中的定义性出现 时: TP--;S[TE]=相关信息; B[CB].ECOUNT++; B[CB].POINTER=TE; (3)遇到END时: B[CB].POINTER=LE+1; for(k=1; k<=B[CB].EC; k++) S[++LE]=S[TE++]; CB=B[CB].OUTERN; 3.重复2.,直到扫描结束. 对于前面的程序结构,其构造符 号表的过程见教材中P266图 6-5
对符号表的访问常见操作有: (1)判定一给定的名字是否在表中; (2)在表中填入一个新名字; (3)访问与给定名字相关的信息; (4)为给定的名字填入或更新其某些信息; (5)从表中删除一个或一组名字 在很多程序设计语言中,对名字的作用域有相应的规定, 即同一名字的标识符,在不同的作用域里标识了不同的 对象,且占用了不同的存储空间. 因此,在组织符号表时,应能反映各个标识符的作用域.
2
6.2 分程序结构语言符号表的建立
分程序结构语言 用其所写的程序单元(program unit) 中,可以再包含嵌套的程序单元,且其中每个程序单元均 可定义属于自己的一组局部变量.如PASCAL中的过程 说明,C中花用括{}号括起来的分程序或复合语句等. 程序单元的嵌套导致了变量作用域的嵌套,故把允许名 字作用域嵌套的语言称为具有分程序结构语言的语言. PASCAL是典型的分程序结构语言之一. 对于嵌套的作用域,同名变量在不同处代表了不同的实 体,因此,需采用分层建立和处理符号表的方式.

第八章符号表

第八章符号表

• 作用:
– 语义分析中用于登记各类符号的语义信息。 – 目标代码生成中用于地址分配等。
名字栏
(NAME)
信息栏
(INFORMATION)
第1项(入口)
第2项(入口) 第N项(入口)
… … …

其中:名字栏符号名称,可以根据具体情况设计 其存储长度。它是符号表的关键字。信息栏存放 符号的各种属性信息,如变量的类型、种属、长 度、存储单元的相对地址等。
8.4 符号表的内容
• 变量:
–类型; –种属; –长度; –相对数(存储单元的相对地址); –若为数组,则记录其内情向量; –若为记录结构,则把它与其它分量按某种形式联 系起来; –形式参数标志。
• 过程:
–是否为程序的外部过程? –若为函数,类型是什么? –其说明是否处理过? –是否递归 –形式参数为何?为了与实在参数进行比较,必须 把它们的种属、类型信息同过程名称联系在一起。
第八章 符号表
• 8.1 符号表的组织与作用
– 8.1.1 符号表的作用 – 8.1.2 符号表的组织方式
• 8.2 整理与查询 • 8.3 名字的作用范围 • 8.4 符号表的内容
8.1 符号表的作用与组织来自• 定义:– 编译过程中用于汇集和存放源程序中各种 名字的属性和特征的存储单元称为符号表。
– 把每一项置于连续的K个存储单元中,从而给出一 张K*N个字的表。 – 把整个符号表分成M个子表,如T1,T2,..,Tm,每个 子表含N项。假定子表Ti的每一项所需的字数为Ki, 那么,k=k1+k2+…+km。对于任何i,T1[i], T2[i] … Tm[i]的并置就构成符号表第i项的全部内容 (按纵项分片) 。

第九章_符号表

第九章_符号表

单表结构 把各分程序中定义的符号组织在一张 符号表中。为实现分程序构造中标识符的 作用域和可视性规则的要求,对单表结构 的符号表,有三个特定要求: 1、为标志一个符号所属的分程序层次,在符 号表中设立一个属性域用来登录符号所在 分程序的层次; 2、表示分程序层次的状态量要随着编译程序 进入或退出分程序而变化,退出时,分程 序符号表中的符号项要随之清除。 3、嵌套的分程序中允许定义重名的标识符。
第一类符号属性1属性2属性3第二类符号属性1属性2属性4第三类符号属性2属性5属性6第一类符号之符号表第二类符号之符号表第三类符号之符号表符号属性值1属性值2属性值3符号属性值1属性值2属性值4符号属性值2属性值5属性值6第一种方法
第九章 符号表
符号表的作用 符号的主要属性及作用 符号表的组织和使用 符号表的管理
关键字域的组织 在编译程序中,符号表的关键字域就是符 号本身,它可以是语言的保留字、操作符 号或标示符等。 采用关键字池的方法可以保证关键字段的 等长,又可以减少甚至消除冗余。 例如,有一组标识符 an exemplar of key-words field (关键字段的组织结构如下图)
§9.4 符号表的管理
符号的查找 查找符号表的目的是建立或确认该符号 的语义属性。 当编译程序从语言源程序获得一个符号时, 首先确定其类别(保留字、运算符或标示 符); 若为保留字或运算符,则将其转换为相应 的内部代码; 若为标识符,则根据符号表的组织方法, 采用相应的查找算法(顺序查找、折半查 找和杂凑查找)进行查找。
符号表的信息栏中登记了每个名字的有 关性质,如类型、种属、大小等;不同 程序语言对名字性质的定义各有不同, 多数程序语言中的名字或者用说明句规 定其性质,或者用某种隐含约定(如 FORTRAN),有些则没有说明句也没 有隐含约定,符号的性质到目标程序运 行时才可确定。

符号表原理介绍(详细)

符号表原理介绍(详细)

§6.2 符号的主要属性及作用
例: int a; float b; struct cc{ int d; float e; // 外部定义的整型变量a // 外部定义的实型变量b // 外部定义的结构类型cc, cc的第一个结构分量d // cc的第二个结构分量t … // 外部定义的结构型变量c
编译程序分析到下述两个说明语句int则在符号表中收集到关于符号a的属性是一个整型变量关于符号b的属性是具有5个浮点型元素的一维数61二上下文语义的合法性检查的依据同一个标识符可能在程序的不同地方出现而有关该符号的属性是在不同情况下收集的
编译原理
第六章 符号表
§6.1 符号表的作用和地位
在编译程序中符号表用来存放语言程序中出现的有关 标识符的属性信息 属性信息,这些信息集中反映了标识符的语 属性信息 语 义特征属性。 在词法分析 语法分析 词法分析及语法分析 词法分析 语法分析过程中,不断积累和更新表中 的信息。 在词法分析到代码生成的各阶段 各阶段,按各自的需要从表 各阶段 中获取不同的属性信息。
§6.2 符号的主要属性及作用
外部变量)被指定分配到该公共静态存储区 公共静态存储区中。 公共变量(外部变量 公共变量 外部变量 公共静态存储区 C/C++中的外部变量就属于这类共静态存储区的分配。在公共静 态区中的变量具有的生命周期是该程序运行的全过程,且其作用 域亦是整个语言程序。 编译程序为局部静态量 局部静态量可设立若干个局部静态区 局部静态区。 局部静态量 局部静态区 对外部静态量 外部静态量,为每个程序文件建立一个局部静态区,对内部静 外部静态量 内部静 态量,则为每个具有内部静态量定义 具有内部静态量定义的函数或过程,建立一个局 态量 具有内部静态量定义 局 部静态区。 部静态区 被Static所定义的符号变量具有的生命周期也是该程序运行的全 过程。但被Static定义的变量若在函数之外则为所在之文件中所 有函数可视。而若变量在函数内被定义为Static,则它仅为所在 函数可视。分别分配不同的静态变量,这仅是编译处理上的问题, 与语言无关。

第9章符号表

第9章符号表

源程序的形式 { //第一层分程序 int a; float b,d; { //第二层分程序 int c; float a; { //第三层分程序 int d; float c; { //第四层分程序 float d; ┊ a=b+c+d; ┊ } } } }
Level 1 Level 2 Level 3 Level 4
其它域的组织
1、等长属性值域组织 可以取相应的数据类型描述属性值。 如,基本数据类型可用3个bit表示:
char 000 short int long unsigned float double 001 010 011 100 101 110
函数形参链属性描述,见p217,图9.11 。 结构成员链属性描述,见p218,图9.12。
分程序结构的分表组织
进入分程序第一层时的符号表层次属性描述
单表结构
分程序结构
进入分程序第二层时的符号表层次属性描述 单表结构
分程序结构
进入分程序第三层时的符号表层次属性描述
单表结构
分程序结构
进入分程序第四层时的符号表层次属性描述
单表结构
分程序结构
练习
对照课件,好好看书吧!
第9章 符号表
9.1 符号表的作用和地位 9.2 符号的主要属性及作用 9.3 符号表的组织 9.4 符号表的管理
1 符号表的作用和地位
在编译程序中符号表用来存放语言程序中出现的 有关标识符的属性信息,这些信息集中反映了 标识符的语义特征属性。
在词法分析及语法在分析过程中不断积累和更新 表中的信息,并在词法分析到代码生成的各阶 段,按各自的需要从表中获取不同的属性信息。
收集符号属性 编译程序扫描说明部分收集有关 标识符的属性,并在符号表中建立符号的相应 属性信息。 上下文语义的合法性检查的依据 同一个标识符 可能在程序的不同地方出现,而有关该符号的 属性是在这些不同情况下收集的。通过符号表 中属性记录可进行相应上下文的语义检查。 作为目标代码生成阶段地址分配的依据 每个符 号变量在目标代码生成时需要确定其在存储分 配的位置。首先要确定其被分配的区域;其次 是根据变量出现的次序,决定该变量在某个区 中所处的具体位置 。

符号表

符号表

3
二 符号表分类
名字有多类,所含信息差异较大,为便于组织与使用,一般把符 号表分为如下几类分别进行管理: 常量表;标号表;变量表;过程名表等.
三 符号表的基本操作
1>查找 2>插入 3>访问 4>修改 5>删除 这些操作在数据结构中已经详细介绍过,这里就不再赘述.
4
四 符号表的组织
为了提高查填速度,符号表一般组织成哈希表.这里介绍一种 经过变异后的哈希表,基本结构如下: 名字 信息 指针 哈希映射 1 0 2 3 i avail 剩余空间 N-1 哈希表分成两个部分:映射空间,符号空间. 映射函数 f (key) 的值域为: 0.. N -1. 映射空间中的内容为指针, 指向符号在符号空间的位置.
5
例如:x,y,z,x1 是程序中说明的变量,编译扫描说明语句时依次把各 变量放入符号表. 假设 哈希函数由各变量名的首字母的位序决定, 则符号表如下: 符号表 hash 表 0 null 1 2 3 4 名字 x y z x1 剩余空间 信息 指针 null
23 24 25
4 2 3
avail
null null 1
7
六 pascal 符号表的组织
pascal 是一种子程序结构的语言,允许嵌套定义子程序,并且 允许同一标识符在不同层次的子程序中代表不同的名字.这就引 出名字的作用域问题,编译时必须保证引用名字的正确性. 例如: program exam;
var i , j , k :integer;
procedure sub1; var i , j :real; begin .......... i ..........; .......... j ..........; .......... k .........; end;

高一数学符号表

高一数学符号表

高一数学符号表数学是一门数据和符号的科学,记号是表达和解释数学概念的重要工具。

在数学上识别和理解符号的重要性已经不言而喻。

以高中数学为例,学习高一数学难免涉及某些符号,这些符号对于理解数学概念至关重要。

高一数学符号表包括混合数学符号,和许多几何符号。

混合数学符号包括:+,-,×,÷,%,(,),[],{},>,=,!=,√,∞,∝,,,△,,°,⊥,≈,,,,,,,,,,,,,,,,,,,。

这些符号对于学习数学至关重要,因此大家应该把它们熟记在心。

符号可以帮助我们更清楚地理解数学概念,从而能更有效地掌握数学知识。

例如:+符号表示加法,-符号表示减法,×表示乘法,÷表示除法,()表示组合,[]表示集合,{}表示子集,<>表示不等式,=表示等号,!=表示不等号,√表示根号,∞表示无穷大,∝表示等比,表示变化,表示向量积,△表示角,表示角平分线,°表示弧度,⊥表示垂直,≈表示近似等于。

此外,高一数学还有许多几何学符号。

这些符号可以帮助我们更好地理解几何概念。

例如:表示点,表示直线,表示射线,表示射线角,表示直角,表示平行,表示平行四边形,表示圆,表示半径,表示弓形,表示圆弧,表示平面,表示平面角,表示面积,表示体积。

高一数学符号表可以让我们更加清楚地了解数学概念,以及如何正确地使用这些符号。

正确使用这些符号有助于我们更好地理解数学中的概念,也可以帮助我们解决问题。

因此,数学符号不仅是表达数学概念的重要工具,同时它们也是理解和解决数学问题的重要步骤,因此大家应该熟练掌握高一数学符号表,以便更好地理解数学概念,解决数学问题。

第八章符号表-文档在线预览

第八章符号表-文档在线预览
· 具体方式:
1. 名字栏存放指示器和一个整数
2 . 名字栏只存放一个指示器
符号表
符号表
名字 ·, 1 ·,
信息
i ma x w e i g h t
1 i 3 ma x 6 w e i g h t
·信息栏的存放
➢各种名字所需信息长短不一,因此可将一些共同 属性直接登记在符号表的信息栏中,特殊属性另 外登记,在信息栏中设一指示器指向存放处。
· 查找方式:
➢首先将给定值K与二叉排序树根结点值比较,若 相等则查找成功;若不等,则当根结点值小于K 时到根的左子树去继续查找,否则到根的右子树 去继续查找。
· 比较:
➢较之折半查找法,二叉排序树的查找速度略有降 低,但它大大减少了生成有序符号表的时间,是 一种较好的有序符号表结构
8.2.3 散列符号表
第八章 符号表
· 8.1 符号表的组织形式 · 8.2 整理与查找 · 8.3 名字的作用范围 · 8.4 符号表的内容
8.1 符号表的组织形式
· 定义:记录源程序中各种名字的属性和特征等有
关信息的表格。
· 一般组织形式:一个
符号表由表项组成,每一
名字栏
项包含两大栏,即名字栏、表项1
信息栏。
表项2
➢虽然原则上只需一张符号表即可,但由于信息的 多样性,常使用许多符号表。
➢具体的数组存放:专门开辟一个信息表区,称为 数组信息表(内情向量表),将数组的有关信息 全部存入此表中,在符号表地址栏中存放此表的 入口地址 。(P224图8 . 2 )
8.2 整理与查找
· 整个编译过程中,符号表的查填频率是非常 高的。编译工作的相当一大部分时间花费在 查填符号表上。所以其表格构造和查填方法 非常重要。

符号表——精选推荐

符号表——精选推荐

符号表≠≤≥≈≡≈‖=≤≥≌∽≮≯∑∏∪∩∈⊿⌒√∟㏒㏑¢∠⊥∨∧∞∝∮∫⊙∷∵∴∶·±Φ1、⼏何符号⊥∥∠⌒⊙≡≌△2、代数符号∝∧∨~∫ ≠ ≤ ≥ ≈ ∞ ∶3、运算符号如加号(+),减号(-),乘号(×或·),除号(÷或/),两个集合的并集(∪),交集(∩),根号(√),对数(log,lg,ln),⽐(:),微分(dx),积分(∫),曲线积分(∮)等。

4、集合符号∪∩∈5、特殊符号∑ π(圆周率)6、推理符号|a| ⊥∽△∠∩∪≠ ≡ ± ≥ ≤ ∈←↑→↓↖↗↘↙∥∧∨&; §①②③④⑤⑥⑦⑧⑨⑩Γ Δ ΘΛΞΟΠΣΦΧΨΩαβγδεζηθικλ µ νξοπρστυφχψωⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ∈∏ ∑ ⁄√ ∝∞ ∟∠∣∥∧∨∩∪∫∮∴∵∶∷∽≈≌≒≠ ≡ ≤ ≥ ≦≧≮≯⊕⊙⊥⊿⌒℃指数0123:o1237、数量符号如:i,2+i,a,x,⾃然对数底e,圆周率π。

8、关系符号如“=”是等号,“≈”是近似符号,“≠”是不等号,“>”是⼤于符号,“<”是⼩于符号,“≥”是⼤于或等于符号(也可写作“≮”),“≤”是⼩于或等于符号(也可写作“≯”),。

“→”表⽰变量变化的趋势,“∽”是相似符号,“≌”是全等号,“∥”是平⾏符号,“⊥”是垂直符号,“∝”是成正⽐符号,(没有成反⽐符号,但可以⽤成正⽐符号配倒数当作成反⽐)“∈”是属于符号,“??”是“包含”符号等。

9、结合符号如⼩括号“()”中括号“[]”,⼤括号“{}”横线“—”10、性质符号如正号“+”,负号“-”,绝对值符号“| |”正负号“±”11、省略符号如三⾓形(△),直⾓三⾓形(Rt△),正弦(sin),余弦(cos),x的函数(f(x)),极限(lim),⾓(∠),∵因为,(⼀个脚站着的,站不住)∴所以,(两个脚站着的,能站住)总和(∑),连乘(∏),从n个元素中每次取出r个元素所有不同的组合数(C(r)(n) ),幂(A,Ac,Aq,x^n)等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

符号表简介
符号表的作用:连接声明与引用的桥梁,记住每个符号的相关信息,如作用域和绑定等,帮助编译的各个阶段正确有效地工作。

对符号表设计的基本要求:目标是合理存放信息和快速准确查找。

1.正确存储各类信息。

2.适应不同阶段的需求;
3.便于有效地进行查找、插入、删除和修改等操作;
4.空间可以动态扩充;
4.3.1 符号表条目
每个声明的名字在符号表中占据一栏,称为条目,用于存放名字的相关信息。

符号表中的内容:保留字、标识符、特殊符号(包括算符、分隔符等)等等。

不同类别的符号存放在不同的子表中,如变量名表、过程名表、保留字表等。

存放方式:关键字+属性。

例:下述符号的关键字应是,名字+类型,称为组合关键字:
int x; struct x { float y, z; };
为C构造的符号表中,组合关键字至少应该包括三项:名字+作用域+类型。

当一个名字x在同一作用域中允许有多于一个的声明,则对x的引用时需要根据上下文确定x到底属于哪个对象。

因此有些程序设计语言在语法上规定了不允许这样的声明,以简化编译时的处理。

4.3.2构成名字的字符串的存储
定长数据与变长数据,直接存放与间接存放。

名字(直接存储)名字(间接存储)属性
sort 101 proc, ...
a 106 int, ...
readarray 108 proc, ...
118 boolean, ...
draw_a_red_line_for_o
bject_a
sort#a#readarray#draw_a_red_line_for_object_a #
↑100
间接存储的方法实际上解决了复杂信息的存储问题,将其推广到属性,则任何一个复杂的属性,均可以为其另辟空间(空间本身可以是复杂结构,如数组的内情向量等),而仅需要将指向此空间的指针放在此属性在符号表中的对应位置即可。

4.3.3 名字的作用域
程序设计语言的名字可以出现在不同的范围内,并且可以具有不同的意义。

两种划分范围的方式:并列的和嵌套的。

不同的语言采用不同的方式:如Pascal的过程定义可以是嵌套的,而C的过程定义是并列的,但是C允许程序块是嵌套的。

名字的作用域:名字在哪个范围内起作用。

并列的两个范围内的名字作用域互不相干,但是分别在嵌套的两个范围内的名字,其作用域的问题就需要制定规则来限定,以使得任何一个名字在任何范围内涵义都是无二义的。

名字的作用域规则:规定一个名字在什么样的范围内应该表示什么意义。

<1> 静态作用域原则(static-scope rule):编译时就可以确定名字的作用域,也可以说,仅
从静态读程序就可确定名字的作用域。

<2> 最近嵌套原则(most closely nested):以程序块为例,也适用于过程。

①程序块B中声明的作用域包括B;
②如果名字x不在B中声明,那么B中x的出现是在外围程序块B'的x声明的作用域中,
使得
(a) B'有x的声明,并且
(b) B'比其它任何含x声明的程序块更接近被嵌套的B。

##
通俗地讲,名字的声明在离其最近的内层起作用,即在名字引用处从内向外看,它处在所遇到的第一个该名字声明的作用域。

4.3.4 线性表
为了正确反映名字的作用域,线性表应具有栈的性质,即符号的加入和删除,均在线性表的一端进行。

表4.2 线性表的符号表组织
线性表上的操作:关键字:名字+作用域;
1. 查找:从表头(栈顶)开始,第一个遇到的名字,即为所需的名字; 2. 插入:若不在链表中,则插入在表头; 3. 删除:
(a) 暂时:将在同一作用域的名字同时摘走,适当保存;假删除 (b) 永久:将在同一作用域的名字同时摘走,不再保存。

4. 修改:与查找类似,修改第一个遇到的名字的信息。

修改可以用插入+删除代替。

例:建立与维护线性表的过程 1. 进入B2:
2. 退出B2,进入B3:
线性表上操作的效率(n 个条目):
1. 一个名字的查找:成功查找(平均):n/2;不成功查找:n+1 2. 建立n 个条目的符号表(最坏):
∑=n
i i 1
= (n+1)(n+2)/2
4.3.5 散列表 <1> 散列表的构成
将线性表分成m 个小表,构造hash 函数,使名字均匀地散布在m 个子表中。

如果散列均匀,则时间复杂度会降到原线性表的1/m 。

图4.4 散列表的结构
每个名字被挂在两个链上:
1.hash link:链接所有具有相同hash值的元素,表头在表头数组中;
2.scope link:链接所有在同一作用域中的元素,表头在作用域链中。

<2> 散列表上的操作
1.查找:首先计算散列函数,然后从散列函数所指示的入口进入某个线性表,在线性表中沿hash link,象查找单链表中的名字一样进行查找。

2.插入:首先查找,以确定要插入的名字是否已在表中,若不在,则要分别沿hash link和scope link插入到两个链中,方法都是插在表头,即两个表均可看作是栈。

3.删除:把以作用域链连在一起的所有元素从当前符号表中删除,保留作用域链所链的子表,为后继工作使用(如果是临时删除,则下次使用时直接沿作用域链加入到散列链中即可)。

表4.2所示的线性表结构的散列表结构如图4.5所示。

图中散列函数的计算公式可以简单地设计为hash(s)=ord(s)-ord('a')。

散列表中的内容(a)处在B2作用域中,而(b)处在B3作用域中,当分析从B2退出进入B3时,(c)所示的作用域表中B2节点的scope link串起B2中声明的所有名字。

<3> 散列函数的计算
原则:减少冲突,分布均匀 方法:充分考虑程序设计语言的特点
若有变量:V001, V002, V003, … , V300,且去首字母的值作为hash 值。

会发生什么?
打乱字母的一种可行的方法:
<1> 从串s 中的c1,c2,…ck 字符确定正整数h 。

h 的计算可以简单的采用各字符的整数值相加,或者取h 0=0, h i =αh i-1+c i , 1≤i ≤k, h=h k 。

α=1时就是简单相加的情况,更一般的是令α是一个大小合适的素数,如α=65599。

<2> 把上面确定的整数h 变换成0和m-1之间的整数。

直接除以m 然后取余数。

m 一般应为素数。

0123
(c) 作用域表的内容
01。

相关文档
最新文档