第六章代码生成和代码优化 第o节符号表 在程序中,用户用标识符定义了不少名 字来代表不同的数据对象编译程序将这 些名字保存在符号表中。符号表除了记 录名字本身而外还记录了与名字关联的 各种属性信息
第六章 代码生成和代码优化 第o节 符号表 在程序中,用户用标识符定义了不少名 字来代表不同的数据对象,编译程序将这 些名字保存在符号表中。符号表除了记 录名字本身而外,还记录了与名字关联的 各种属性信息
符号表的一般形式 每个名字对应一个表项一个表项包括名 字域和信息域。 名字 信息
一. 符号表的一般形式 每个名字对应一个表项,一个表项包括名 字域和信息域。 名字 信息
其中,信息域通常设若干子域及标志位,其 内容可以是和名字有关的任何信息 类型种属长度相对地址数组的内情向量, 记录与分量的联系形参标志说明标志赋 值标志等。 因名字的长度、信息域的组成及长度可 能是各不相同的一般采用间接表技术
其中,信息域通常设若干子域及标志位,其 内容可以是和名字有关的任何信息: 类型,种属,长度,相对地址,数组的内情向量, 记录与分量的联系,形参标志,说明标志,赋 值标志等。 因名字的长度、信息域的组成及长度可 能是各不相同的,一般采用间接表技术
二.常用的符号表结构 1线性表用N个数组A,A2A来存 放符号表的N个子域 2HASH表
二. 常用的符号表结构 1. 线性表: 用N个数组A1 ,A2 ,…,AN来存 放符号表的N个子域 2. HASH表
第一节语义分析和中间代码生成 O.概述 1.语义分析的主要工作 (1)语义检查:如类型是否-致数组维 数是否正确。 (2)语义处理:对说明语句,登记信息;对 可执行语句生成中间代码
第一节 语义分析和中间代码生成 O. 概述 1. 语义分析的主要工作 (1)语义检查: 如类型是否一致,数组维 数是否正确。 (2)语义处理: 对说明语句,登记信息;对 可执行语句,生成中间代码
2.语法制导翻译 为每个产生式配上一个语义子程序在语 法分析过程中当用一个产生式进行匹配 或归约时,就调用相应的语义程序 上述语义子程序既可能包含了语义检查, 也可能包含了语义处理,其核心是为了生 成相应的中间代码
2. 语法制导翻译 为每个产生式配上一个语义子程序,在语 法分析过程中,当用一个产生式进行匹配 或归约时,就调用相应的语义程序。 上述语义子程序既可能包含了语义检查, 也可能包含了语义处理,其核心是为了生 成相应的中间代码
例:语法分析采用自底向上的LR分析法 X→>AB B的语义值 Y→CD BA A的语义值 Z→>XY 状态栈 符号栈 语义栈
例:语法分析采用自底向上的LR分析法 X→AB Y→CD Z→XY 状态栈 符号栈 语义栈 B A • • • B的语义值 A的语义值 • • •
Ⅹ的语义值 状态栈 符号栈 语义栈
状态栈 符号栈 语义栈 X • • • X的语义值 • • •
D的语义值 C C的语义值 X的语义值 状态栈 符号栈语义栈
状态栈 符号栈 语义栈 D C X • • • D的语义值 C的语义值 X的语义值 • • •
Y的语义值 X的语义值 状态栈 符号栈语义栈
状态栈 符号栈 语义栈 Y X • • • Y的语义值 X的语义值 • • •