第八章 符号表 编译原理-国防科技大学课件

合集下载

编译原理:第八章 符号表

编译原理:第八章 符号表
规定主程序的层次为1主程序中定义的层次为2依次类推名字的类型类型有整型ints字符型chars布尔型bool数组arrays对于无类型的名字填入notype一个布尔量用于标明名字是否为变量形参名当名字是否为变量形参名时填入false其他情况填入true或不填当名字为数组类型或数组变量名时ref指向该数组在数组信息表中的位置
合肥工业大学 计算机与信息学院软件所
表 0.1 符号名表 SNT NAME INFORMATION M 形式参数,整 型,值参数 N 形式参数,整 型,值参数 K 整型,变量
表 0.2 常数表 CT 值 (VALUE) (1) 1 (2) 4
表 0.3 入口名表 ENT NAME INFORMATION (1) INCWAP 二目子程序, 入口四元式:1

ax→
数组下限 数组上限 数组元素的体积 数组本身的体积 当元素为数组时,它指向 数组元素类型 数组的下标类型 该元素数组信息在atab表 中的位置,其他情况为0
合肥工业大学 计算机与信息学院软件所
type a=array[1..10, 1..10] of integer;
name kind typ ref
合肥工业大学 计算机与信息学院软件所
PL 语言编译程序的符号表
1. 表格的定义 名字表(nametab) 程序体表(btab) 层次显示表(display) 数组信息表(atab) 中间代码表(code)
合肥工业大学 计算机与信息学院软件所
1) 名字表(nametab) 名字表nametab:登记程序中出现的各种名 字及其属性
lastpar last psize vsize 0 1

bx→
指向本程序体中最后一个形式参在 本程序体所有局部数据所 指向本程序体中最后一个名字在 本程序体所有形参所需体积、包 nametab 中的位置 需空间大小 nametab 中的位置 括连接数据所占空间

编译原理 第八章符号表

编译原理 第八章符号表

第八章符号表编译过程中编译程序需要不断汇集和反复查证出现在源程序中各种名字的属性和特征等有关信息。

这些信息通常记录在一张或几张符号表中。

符号表的每一项包含两部分,一部分是名字(标识符),另一部分是此名字的有关信息。

每个名字的有关信息一般指种属(如简单变量、数组、过程等)、类型(如整、实、布尔等)等等。

这些信息将使用于语义检查、产生中间代码以及最终生成目标代码等不同阶段。

编译过程中,每当扫描器识别出一个单词后,编译程序就查阅符号表,看它是否已在其中。

如果它是一个新名就将它填进表里。

它的有关信息将在词法分析和语法-语义分析过程中陆续填入。

符号表中所登记的信息在编译的不同阶段都要用到。

在语义分析中,符号表所登记的内容将用于语义检查(如检查一个名字的使用和原先的说明是否相一致)和产生中间代码。

在目标代码生成阶段,当对符号名进行地址分配时,符号表是地址分配的依据。

对于一个多遍扫描的编译程序,不同遍所用的符号表也往往各有不同。

因为每遍所关心的信息各有差异。

本章重点:符号表的一般组织和使用方法。

第一节符号表的组织和使用信息栏通常包含许多子栏和标志位,用来记录相应名字的种种不同属性。

由于查填符号表一般都是通过匹配名字来实现的,因此,名字栏也称主栏。

主栏的内容称为关键字(key word)。

虽然原则上说,使用一张统一的符号表也就够了,但是,许多编译程序按名字的不同种属分别使用许多符号表,如常数表、变量名表、过程名表等等。

这是因为,不同种属名字的相应信息往往不同,并且信息栏的长度也各有差异的缘故。

因而,按不同种属建立不同的符号表在处理上常常是比较方便的。

对于编译程序的符号表来说,它所涉及的基本操作大致可归纳为五类:1、对给定名字,确定此名是否在有中;2、填入新名;3、对给定名字,访问它的有关信息;4、对给字名字,填写或更新它的某些信息;5、删除一个或一组无用的项。

不同种类的表格所涉及的操作往往也是不同的。

上述五方面只是一些基本的共同操作。

编译原理蒋宗礼课件第8章

编译原理蒋宗礼课件第8章

22
8.4.2 程序块结构符号表的其他实现
对图8.10 中的程序
...
a0 ... b0 ...
NULL NULL
(a) 处理到语句(5)时的符号表
... a0 ... b1 ... b0 NULL NULL
(b) 处理到语句(7)时的符号表
23
8.4.2 程序块结构符号表的其他实现
对图8.10中的程序
名字 符号种类 符号表表项1 符号表表项2 符号表表项3 abc i myarray ... 变量 变量 数组 int int int ... 基本属性 类型 地址 扩展属性指针 0 4 8 NULL NULL 维数 2 各维维长 3 4 扩展属性
图8.3 多种符号共用符号表的一种实现结构
11
8.1.2 符号表中的属性
19
8.4.2 程序块结构符号表的其他实现
• 将所有块的符号表放在一个大数组中,然后再引入 一个程序块表来描述各程序块的符号表在大数组中 的位置及其相互关系
名字 外层块 符号个数 起始指针 0 1 2 3 -1 0 1 1 2 1 1 1 程序块表 1 2 3 4 5 a b b b a 符号表 属性
– 如栈式存储分配时,i的地址是以栈指针sp为基址 加上i相对于活动记录起始地址的偏移量offseti
• 符号表中各符号的地址属性就是该符号相对于 第一个符号的偏移地址
13
8.3 符号表的组织结构 8.3.1 符号表的线性表实现
• 用线性表实现符号表较为直观
– 数组实现:插入n个符号、执行e次查找操作的时 间复杂度为T(n, e) = O(n(n+e)) – 有序数组实现:插入n个符号、执行e次查找操作 的时间复杂度为T(n, e) = elog n+ (log i) + i ≤ (n+e)log n+O(n2)

编译原理第8章

编译原理第8章
第八章 符号表
6、翻译模式
P:说明语句,D:类型说明语句,id:标识符(变量名),T:类型 T T T T integer {T.type:=integer;T.width:=4} 变量名及 real {T.type:=real;T.width:=8} 其性质填 T1 {T.type:=pointer(T1.type);T.width:=4} 入符号表 array[num] of T1 {T.type:=array(num.val,T1.type); offset T.width:=num.val*T1.width} D id:T {Enter(,T.type,offset); offset:=offset+T.width} offset D D;D P D {offset:=0} 内存用户区 语义子程序(语义动作) 产生式
* a * b * @b * @ b * @
c c c c b d a+a*(b-c)+(b-c)*d的DAG a:=b*-c+b*-c的语法树 a:=b*-c+b*-c的DAG
第八章 符号表
3、与后缀式的关系:表达式的抽象语法树形式的中间代码与后 缀式等价,后缀式是抽象语法树的线性表现形式,是树的结点 序列(每个结点都在其所有子结点之后立即出现 )。
第八章 符号表
符号表的作用和地位 符号的主要属性及作用 符号表的组织
第八章 符号表
一、符号表的作用和地位
一、本章主要内容: 静态语义检查和翻译中间代码; 二、静态语义检查的内容: 类型检查、控制流检查、一致性检查、相关名字检查、 名字的作用域分析等; 三、翻译产生中间代码的优点: 便于进行与机器无关的代码优化工作、使编译程序改变目标 机更容易、使编译程序的结构在逻辑上更为简单明确; 四、静态语义检查和中间代码产生在编译程序中的地位:

编译原理课件-符号表

编译原理课件-符号表
查詢表項
在引用聲明過的識別字時進行
修改表項
在獲得新的語義值資訊時進行
刪除一個或一組無用的項 釋放符號表的空間
在編譯結束前或退出一個分程式
符號表的組織
總體組織和表項屬性資訊組織 第一種: 把屬性種類完全相同的那些符號組織
在一起,構造出多個符號表,常數表、變數名 表、過程名表,標號表 第二種: 把所有語言中的符號都組織在一張符 號表中。組成一張包括了所有屬性的龐大的符 號表 第三種:。。。
上下文語義的合法性檢查的依據
在語義分析中,符號表所登記的內容將用於語義檢查(如檢查一 個名字的使用和原先的說明是否一致)和產生中間代碼。
目標代碼生成階段地址分配的依據
在目標代碼生成階段,當對符號名進行地址分配時,符號表是地 址分配的依據。對一個多遍掃描的編譯程序,不同遍所用的符號 表也往往各有不同。因為每遍所關心的資訊各有差異。
符號表項的排列
符號表作為一個多元組,表中元組的排列組織 是構造符號表的重要成分。在編譯程式的整個工 作過程中,符號表被頻繁地用來建立表項,查找 表項,填充和引用表項的屬性。因此表項的排列 組織對該系統運行的效率起著十分重要的作用。 在編譯程式中,符號表項的組織傳統上採用三種 構造方法。即線性法,二分法及散列法。
根源程式
詞法分析器
單詞符號

語法分析器


語法單位


語義分析與中間代碼生成器

中間代碼


代碼優化
中間代碼

目標代碼生成器
目標代碼
符號表
符號表是一種數據結構,用來保存根源程 式語言中的各種資訊,如記錄名字的作用 域以及綁定資訊。
在編譯過程不斷彙集和查證出現在根源程 式中的各種單詞的語義屬性特徵資訊。

编译原理符号表的原理及典型实例

编译原理符号表的原理及典型实例

05
符号表的设计与实现
符号表的数据结构设计
符号表的数据结构应满足高效、 易扩展和易维护的要求,通常 采用哈希表、二叉树等数据结
构实现。
符号表应包含符号名称、符 号类型、符号属性等信息, 以便在编译过程中快速查找
和识别符号。
符号表还应支持动态添加、删 除和修改等操作,以适应源代
码中符号的变化。
符号表的实现算法
常量名的符号表实例
总结词
常量名符号表实例展示了如何使用符号表来管理程序中的常量。
详细描述
常量名符号表记录了常量的名称、类型和值等信息。通过符号表,编译器能够方 便地查找常量的定义和使用,并进行相应的语义分析和代码生成。在处理常量时 ,符号表有助于编译器优化程序的性能,例如常量折叠和常量传播等。
04
编译原理符号表的原 理及典型实例
目录
• 编译原理符号表概述 • 符号表的原理 • 符号表的典型实例 • 符号表在编译过程中的应用 • 符号表的设计与实现
01
编译原理符号表概述
符号表的概念
符号表是一种用于存储程序中标识符 信息的数据结构,主要用于编译过程 中对标识符进行跟踪和管理。
符号表中的每个条目都包含有关标识 符的信息,如名称、类型、作用域等。
如果符号表中存在该标识符的信息,编译器就可以 使用这些信息来生成相应的代码。
符号表的更新
01
在编译过程中,符号表可能会被更新以反映源代码的变化。
02
当源代码中添加、删除或修改标识符时,符号表中的相关信息
也需要相应地更新。
更新符号表的过程通常涉及到在哈希表中插入、删除或修改相
03
应的条目。
03
符号表的典型实例
典型实例

编译原理符号表

编译原理符号表

编译原理符号表1. 引言编译原理是计算机科学领域中一个重要的研究方向,它研究的是将高级语言程序转化为机器语言的过程。

在编译器中,符号表是一种常用的数据结构,用于存储程序中的各种符号及其相关信息。

本文将深入探讨编译原理符号表的概念、作用、设计方法以及常见的符号表实现方式。

2. 符号表的概念和作用2.1 符号表的定义符号表是编译器中用于存储程序中各种符号信息的数据结构。

它一般由编译器自动生成和维护,用于支持语法分析、语义分析和代码生成等编译过程。

2.2 符号表的作用符号表在编译器的各个阶段都发挥着重要的作用:•语法分析阶段:符号表用于识别和存储各种变量、函数和类型的声明信息,以支持后续的语义分析过程。

•语义分析阶段:符号表用于检查变量和函数的引用是否合法,并记录其类型信息和作用域等属性,以支持类型检查和语义约束的验证。

•代码生成阶段:符号表用于存储中间代码和目标代码中的符号引用和符号定义的映射关系,以支持代码生成和目标代码优化等过程。

3. 符号表的设计方法3.1 符号表的数据结构符号表的数据结构通常由符号表项组成,每个符号表项用于存储一个符号及其相关信息。

常见的符号表项包括符号名称、符号类型、作用域、内存地址等。

3.2 符号表的组织方式符号表的组织方式可以有多种选择,常见的包括线性表、哈希表、树和图等。

选择合适的组织方式可以提高符号表的查询效率和插入删除的性能。

3.3 符号表的查询算法符号表的查询算法是指根据给定的符号名称,在符号表中进行查找并返回对应的符号表项。

常见的查询算法有线性搜索、二分搜索和哈希搜索等,选择合适的查询算法可以提高符号表的查询效率。

4. 常见的符号表实现方式4.1 线性表实现线性表实现是符号表最简单的一种实现方式,它可以使用数组或链表来存储符号表项。

线性表实现的优点是简单易懂,缺点是查询效率较低,随着符号表规模的增大,性能下降明显。

4.2 哈希表实现哈希表实现是一种常用的符号表实现方式,它通过哈希函数将符号名称映射到符号表项存储的位置。

编译原理-国防科技大学课件Chapt3

编译原理-国防科技大学课件Chapt3
名和过程名 常数:各种类型的常数 运算符:+,-,*,/, 界符:逗号、分号、括号和空白
国防科技大学计算机系602教研室
输出的单词符号的表示形式:
(单词种别,单词自身的值)
单词种别通常用整数编码表示。
若一个种别只有一个单词符号,则种别编 码就代表该单词符号。假定基本字、运算 符和界符都是一符一种。
表示。有些也要超前搜索。 5.EQ.M 5.E08
4 算符和界符的识别 把多个字符符合而成的算符和界符拼合成
一个单一单词符号。 :=, **, .EQ. , ++,--,>=
国防科技大学计算机系602教研室
三、状态转换图
1 概念
状态转换图是一张有限方向图。
结点代表状态,用圆圈表示。 X
状态之间用箭弧连结,箭弧 1
扫描缓冲区


起点 搜索
指示器 指示器
国防科技大学计算机系602教研室
WhatALong…Word
…rd WhatALong…Wo
… WhatALong…Wo rd
rd
… WhatALong…Wo
国防科技大学计算机系602教研室
二、单词符号的识别:超前搜索
1 基本字识别: 例如: DO99K=1,10
开始符S至少必须在某个产生式的左部出现一次。
国防科技大学计算机系602教研室
复习:程序语言的语法描述
定义:称A直接推出,即
A 仅当A 是一个产生式, 且, (VT VN)* 。
如果1 2 n,则我们称这个序 列是从1到n的一个推导。若存在一个从 1到n的推导,则称1可以推导出n 。
国防科技大学计算机系602教研室?全局变量与过程1ch字符变量存放最新读入的源程序字符2strtoken字符数组存放构成单词符号的字符串3getchar子程序过程3getchar子程序过程把下一个字符读入到ch中4getbc子程序过程跳过空白符直至ch中读入一非空白符5concat子程序把ch中的字符连接到strtoken把下一个字符国防科技大学计算机系602教研室6isletter和isdisgital布尔函数判断ch中字符是否为字母和数字7reserve整型函数对于strtoken中的字符串查找保留字表若它实保留字则给出它的编码否则回送08retract子程序把搜索指针回调一个字符位置个字符位置9insertid整型函数将strtoken中的标识符插入符号表返回符号表指针10insertconst整型函数过程将strtoken中的常数插入常数表返回常数表指针

《编译原理》课件

《编译原理》课件
了解中间代码生成的概念和它在编译过程中的角色。 学习四元式和三地址码的表示和生成方式,以及中间代码优化的技巧。
六、代码生成
了解目标机器的指令系统和存储结构,以及它们对代码生成的影响。 学习寄存器分配和目标代码生成的基本原理和方法。
七、附录
参考文献提供了进一步学习编译原理的资源。 课程总结将回顾课程中学到的重要知识,并概述关键概念和技术。 问题解答将回答学生在课程学习中提出的问题。 课程评价将收集学生对课程的反馈和评价,以便对将来的课程进行改进。
《编译原理》PPT课件
编译原理PPT课件将带您深入了解编译原理的重要概念和技术。这个课程介绍 了编译原理的意义以及编译过程的概述。
一、引言
课程介绍编译原理的重要性,让您理解为什么编译原理对于软件开发非常关 键。 编译过程的概述将带您了解传统的编译过程中涉及的各个阶段和任务。
二、词法分析
词法分析是编译过程中的第一步,了解词法分析的作用以及它在编译器中的 实现。 掌握正则表达式和有限自动机的概念,这些是实现词法分骤,理解它的作用和不同的语法分析方法。 学习上下文无关文法以及LL(1)语法分析器和LR(1)语法分析器的实现原理。
四、语义分析
语义分析是编译过程中的重要一环,了解它的作用和涉及的任务。 学习语义动作、符号表管理和类型检查,以及如何进行语法制导翻译。
五、中间代码生成

编译原理08符号表

编译原理08符号表
线性符号表 项 数 1 2 3 4 AVAILABLE→ NAME BC I J1 XYZ INFORMATION … … … …
对这种顺序化的表格可采用对折法查找
15
对一遍扫描的编译程序来说,对折法用处不大。 对一遍扫描的编译程序来说,对折法用处不大。因 符号表是边填边引用的, 为,符号表是边填边引用的,每填进一个新项都得 顺序化符号表, 顺序化符号表,极费时间 可采用二叉树来组织符号表,令每项为一结点, 可采用二叉树来组织符号表,令每项为一结点,每 个结点附设两个指示器栏,一栏为LEFT,另一栏 个结点附设两个指示器栏,一栏为 , 为RIGHT,主栏内码值作为该结点的值 , 任何结点p右枝的所有结点值均小于 的值, 右枝的所有结点值均小于p的值 任何结点 右枝的所有结点值均小于 的值,而左枝 的任何结点值均大于p的值 的任何结点值均大于 的值
14
NAME J1 XYZ I BC
INFORMATION … … … …
3.2 对折查找与二叉树
为提高查表速度,在造表同时把表格中的项按名字的“大小” 为提高查表速度,在造表同时把表格中的项按名字的“大小” 顺序整理排列 名字的“大小”指名字的内码二进制,如规定值小者在前, 名字的“大小”指名字的内码二进制,如规定值小者在前, 值大者在后
11
四元式表QT 四元式表 OPR (1) ) LINK INCWAP INCWAP M N K INCWAP INCWAP 1 2 1 2 1 4 M N K M N M N (2) actpar ) (3) actpar ) (4) ) (5) ) (6) ) + + := AGR1 AGR2 RESULT //保护返回地址及有关寄存器 保护返回地址及有关寄存器 //把第一个实参值传给 把第一个实参值传给M 把第一个实参值传给 //把第二个实参值传给 把第二个实参值传给N 把第二个实参值传给 //K:=M+1 //M:=N+4 //N:=K //把M的值回送给第一个实参 把 的值回送给第一个实参 //把N的值回送给第二个实参 把 的值回送给第二个实参 //恢复寄存器,控制返回调用段 恢复寄存器, 恢复寄存器

编译原理 第八章——符号表

编译原理 第八章——符号表

Program B1(input,output); const a=10; var b,c:integer;
NAM E
TOP→7
INFOR PREVIOU MATION S …… …… …… …… …… …… …… …… 7 0 5 4 3 2
e:real; Program B2(); var f:int; ……
…… f B2 e c b a
6 5 4 3 2 1 SP→
6 1
DISPLAY
线性查找、二叉树和杂凑技术
1.线性表 每一项按先来者先填。查找时从表的第一项开始 顺序查找。 要填进新名字时,先查找表格,已在表中则不填, 报重名错;若不在表中,填进AVAILABLE所在位 置,AVAILABLE指向下一空白项。 一张含n项的线性表,查找其中某项,平均做n/2 次比较。 自适应线性表,添加指示器,将所有项按“最新 最近”访问原则连成一条链。
符号表的组织与作用
一张符号表的每一项(入口)包含两大栏(区域、字段): 名字栏和信息栏。 名字栏称主栏,主栏的内容称为关键字,一般不允许重名。
名字栏 (NAME)
第1项(入口1) 第2项(入口2)
信息栏 (INFORMATION)
……
第n项(入口n)
符号表的组织方式
1.各项各栏所占存储单元 的长度都是固定的,每栏 的内容可直接填写在有关 区段。
3.杂凑技术 构造地址函数H。对任何名字SYM, H(SYM)取值0~N-1之间,从H(SYM)获得 SYM在表中的位置。 如:可取N为质数, H(SYM)定义为SYM/N 的余数。 如何解决“地址冲突”? 可使用一张杂凑(链)表将所有相同杂凑 值的符号名连成一串过程相联系。 <名字,过程编号> FORTRAN的符号表组织 将局部名登记在表格区的一端,全局名登记在表格区的另 一端。 Pascal的符号表组织 ——将其符号表设计为栈符号表,当新的名字出现总是从 栈顶填入。 ——引入一个显示(DISPLAY)层次关系表,称为过程的 嵌套层次表。其作用是为了描述过程的嵌套层次,指出当 前正在活动着的各嵌套的过程(或函数)相应的子符号表 在栈符号表中的起始位置(相对地址)。 ——在符号表的信息栏中引入一个指针域(previous)用 以链接它在同一过程内的前一域名字在表中的下标(相对 位置)。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(4) +
M
1
(5) +
N
4
(6) :=
K
(7) return
RESULT
M N K M N
2020/11/11
8.2 整理和查找
1. 线性查找 • 按关键字出现的顺序填写各项。 • 填表快,查找慢。 • 结构简单,节省空间,效率低,查找时间
复杂度:O(n)。
• 改进:自适应线性表
2020/11/11
BEGIN
START:
K:=M+1;
M:=N+4;
N:=K; END.
表 0.3 入口名表 ENT
NAME INFORMATION
(1) INCWAP 二目子程序,
入口四元式:1
2020/11/11
PROCEDURE INCWAP(M,N:INTEGER);
LABEL START;
VAR
K:INTEGER;
LABEL START;
VAR
K:INTEGER;
BEGIN
START:
K:=M+1;
M:=N+4;
N:=K;
表 0.2 常 数 表 CT
END.

(VALUE)
(1) 1
(2) 4
2020/11/11
PROCEDURE INCWAP(M,N:INTEGER);
LABEL START;
VAR
K:INTEGER;
K 整型,变量
表 0.2 常 数 表 CT 值
(VALUE) (1) 1 (2) 4
表 0.3 入口名表 ENT NAME INFORMATION
(1) INCWAP 二目子程序, 入口四元式:1
表 0.4 标号表 LT NAME INFORMATION (1)START 四元式:(4)
2020/11/11
BEGIN
START:
K:=M+1;
M:=N+4;
N:=K;
表 0.4 标号表 LT
END.
NAME INFORMATION
(1)START 四元式:(4)
2020/11/11
表 0.1 符 号 名 表 SNT NAME INFORMATION
M 形式参数,整 型,值参数
N 形式参数,整 型,值参数
(2) 程序na体m表e bkitnadb和lev层t次yp显n示or表mdalisrpelfayadr/val/size link
0
程1序体表btab:记录个程序体的总信息,用 t于;x→对对源名程字序表中进定行义 管的 理名字的作用域进行分析
2. 二分查找 • 表格中的项按名字的“大小”顺序整理排列
。 • 填表慢,查找快。查找时间复杂度:O(Log2n) • 改进:组织成二叉树。
3. 杂凑查找(HASH技术) • 杂凑函数H(SYM):0~N-1
N:符号表的项数。
• 要求:1. 计算简单高效 2. 函数值分布均匀
• 填表快,查找快
2020/11/11
例: PASCAL程序段:
PROCEDURE INCWAP(M,N:INTEGER); LABEL START; VAR
K:INTEGER; BEGIN START:
K:=M+1; M:=N+4; N:=K; END.
2020/11/11
PROCEDURE INCWAP(M,N:INTEGER);
第八章 符号表
• 符号表的作用:
–一致性检查和作用域分析; –辅助代码生成.
2020/11/11
8.1 符号表的组织与作用
• 符号表的每一项(入口)包含两大栏:
–名字栏,也称主栏,关键字栏 –信息栏,记录相应的不同属性,分为若干子栏
.Hale Waihona Puke • 对符号表的操作:–填入名称 –查找名字 –访问信息 –填写修改信息 –删除 2020/11/11
LABEL START;
VAR
K:INTEGER;
BEGIN
START:
K:=M+1; M:=N+4; N:=K;
表 0.1 符 号 名 表 SNT NAME INFORMATION
END.
M 形式参数,整
型,值参数
N 形式参数,整
型,值参数
K 整型,变量
2020/11/11
PROCEDURE INCWAP(M,N:INTEGER);
2020/11/11
1) 名字表(nametab) 名字表nametab:登记程序中出现的各 种名字及其属性
name kindlev typ normal ref adr/val/size link
0 1 tx→
当组在名信程2名0字息序20▪中址▪▪/avs11字名(类a分di为表体/z1clr1e,,类o,当字型当数中表标当的n名名 (于名名c存(种组 的s字字tbh一 名 其识字字 无贮ty为为ta类位a为p单a个 , 他变n变的 类r符e名 定 义类b元,s型 置t量量指在n为))型)布 当 情的)类 型、a名中、字主的名、可或;名n0向相m时尔名况时型的a过时的变所程层对布同以e数当,m(包,地t量字填,名程填a位量在序次一e尔是括组名填址bt入,是入类字a形程入(;中置(的的为型常他变字pbv参该对用否t序型填登中r们a;程层2r(,类量为o于urb的,体记的于为有入存型ic过其序次eoa相名过e入中数的位程依或bo标变整n应d他体为该据名程时l定o第置值e)u次不明量变所型,、情t的1)r义名,一,y量需、填e类,填名形(数p况(静的存)个i每入时或rne推主e字参贮他形组上名个tr态f,s单e们指参程是 名一字程()f元层相)a、r为在向序个e的否 时的序应r次相rf字数0代名该指al体中应为填i目码。ny符活字在数向k定的s变入动规)型入组该,记量f口a录在过对地l形se数程参,
PROCEDURE INCWAP(M,N:INTEGER);
LABEL START;
VAR
K:INTEGER;
BEGIN
表 0.5 四 元 式 表 QT
START: K:=M+1; M:=N+4;
OPR OPN1 OPN2 (1) link
N:=K; END.
(2) par INCWAP 1 (3) par INCWAP 2
8.4 符号表的内容
符号表的信息栏中登记了每个名字的有关 性质 ➢ 类型:整、实或布尔等 ➢ 种属:简单变量、数组、过程等 ➢ 大小:长度,即所需的存储单元字数 ➢ 相对数:指分配给该名字的存储单元的 相对地址
2020/11/11
PL 语言编译程序的符号表
1. 表格的定义 名字表(nametab) 程序体表(btab) 层次显示表(display) 数组信息表(atab) 中间代码表(code)
相关文档
最新文档