第六章语义分析和符号表剖析.ppt

第六章语义分析和符号表剖析

语义分析和符号表 主要内容: 语义分析概述(必要性、功能、描述方法) 符号表 类型表达式 声明和程序体的语义分析 语义分析的必要性 语法和语义的区别: 语法:关于什么样的字符串才是该语言 在组成结构上合法的程序的法则。 语义:关于结构上合法的程序的意义的 法则。 语义分析的功能 语义种类 静态语义:在编译阶段(从程序文本上)可 以检查的语义。 动态语义:通过程序的执行才能检查的语 义。 语义的描述 语义形式化方法: 1. 操作语义 2. 指称语义 3. 公理语义 4. 代数语义 语义分析的内容: 类型分析 标识符相关信息 语义分析的功能: 检查语义错误 构造标识符属性表(符号表) 语义分析的实现: 与语法分析相结合 语义分析的功能图示 标识符的内部表示 类型的内部表示 值的内部表示 标识符的内部表示 标识符种类: 常量名、类型名、变量名、函数名、过程名、域名。 TYPE idkind=( consKind, typeKind, varKind, fieldKind, procKind,funcKind ) 内部表示(AttributeIR): 常量: 类型: 变量: 域名*: 过函: 例有声明如下: CONST pai= 3.14 ; TYPE vector=ARRAY[1..10] OF integer; VAR x, y : real ; r, s : vector ; 设当前层数和可用offset值分别为L和0,构造标识符 pai, vector, x, y, r 和s 的属性表示。 类型的内部表示 类型的种类:标准、子界、枚举、数组、记录、 集合、文件、指针类型等等。 TypeKind=(intTy,boolTy,charTy,realTy,enumTy, subTy,arrayTy,recordTy,setTy,fileTy,pointerTy) 内部表示:(TypeIR) 标准类型: sub: enum: array: record: FixBody: VariBody: set: file: pointer: 例有如下的类型定义: at = ARRAY [1..10] OF ARRAY[1..100] OF integer; rt = RECORD x : real ; a : at; CASE u: boolean OF false:(k : integer); true:(y: real; b: boolean) END 构造类型的内部表示。 值的内部表示 非结构类型值的内部表示: 实型 指针 有序类型:整数形式 有序类型的常量表示: 整型常量:ord(N) = N 布尔常量:ord(false)=0, ord(true) = 1 字符常量:ord(C) = ASCⅡ (C) 枚举常量:设有枚举类型(D,A,B),则有 ord(D)=0,ord(A)=1,ord(B)=2 子界常量:设有子界类型C1..C2,则值空间 为[ord(C1)...ord(C2)] 符号表 标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 有关符号表的操作: 添加、作用域删除、查询 处理符号表的模块: 定义符号表数据结构 定义符号表上的操作 符号表 符号表的作用:为语义检查和代码生成提供 标识符的语义信息。 标识符的处理思想: ? 遇到定义性标识符时,在符号表中填写 被定义标识符的符号项;

文档评论(0)

1亿VIP精品文档

相关文档