教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 行业资料 >

第六章 语义分析(3)

来源:网络收集 时间:2026-08-21
导读: 第六章 语义分析 6.1 语义分析概述 6.2 符号表 6.3 类型的语义分析 6.4 声明的语义分析 6.5 程序体的语义分析 6.6 属性文法和动作文法 内容回顾 什么是语义分析?– 建立符号表; – 检查语义错误; 在何处进行分析?– 声明部分 --- 建立符号表;检查“重复声明

第六章 语义分析 6.1 语义分析概述

6.2 符号表 6.3 类型的语义分析 6.4 声明的语义分析 6.5 程序体的语义分析 6.6 属性文法和动作文法

内容回顾

什么是语义分析?– 建立符号表; – 检查语义错误;

在何处进行分析?– 声明部分 --- 建立符号表;检查“重复声明”错误; – 体部分 --- 查找符号表,检查“有使用无声明”错误和

类型相关的错误;

怎样进行语义分析?– 属性文法 – 动作文法 – 基于语法树的语义分析;

6.3 类型的语义分析

基本概念– 类型等价性 – 类型相容性

类型的语义分析分析什么? 在何处分析? 怎样分析?

6.3 类型的语义分析

类型等价性– 按名等价– 按结构等价

typedef int T1[10]; typedef int T2[10];

T1 a, b; T2 c, d;

6.3 类型的语义分析

类型相容性– 具体的编译器定义不同;– 常见的三种相容性 操作分量相容 赋值相容性 形参和值参相容性

6.3 类型的语义分析

类型的语义分析分析什么?– 建立类型的内部表示; – 检查类型定义中的语义错误;

在何处进行语义分析?– 类型声明

– 变量声明– 参数声明

类Pascal语言的抽象语法树根结点 ProK程序头 PheadK 类型声明 TypeK 变量声明 程序体 StmLK

VarK

声明 1 声明 1

……

声明 n

语句 1

……

语句 n

……

声明 n 过程声明 1

……

过程声明 n

过程体 StmLK 形参 1

……

形参 n 语句 1

……

语句 n

类型声明

变量声明

过程声明

类C语言的抽象语法树程序Root 节点 Node2 …… 常量声明 类型声明 节点 Node 节点 Noden FunNode1 节点 Node1

语句

变量声明函数声明

形参声明 FunNode1

… FunNode1

类型的语义分析

怎样分析?– 根据类型的不同,分别建立它们的内部表示; 类型名 ; 基本类型; 枚举类型; 数组类型; 结构类型; 联合类型; 指针类型; 递归类型

6.3 类型的语义分析

类型名– 查找符号表,取得名字对应的内部表示;

基本类型– 由系统预定义好并存储在符号表中,可以直接引用

Name int bool char real

Kind typeKind typeKind typeKind typeKind

TypePtr intPtr boolPtr charPtr realPtr

Size intSize boolSize charSize realSize

Kind intTy boolTy charTy realTy

6.3 类型的语义分析

枚举类型– 一般形式: (id1, …, idn) – 常量标识符:

(id1, intType, constKind, 0) …… (idn, intType, constKind, n-1) – 建立常量标识符的内部表示; – 建立枚举类型的内部表示;

Size 1

Kind enumTy

EListid1

idn nil

6.3 类型的语义分析

数组类型– 取得数组的下界Low和上界Up;– 获取或建立成分类型的内部表示指针; – 计算数组类型的空间大小: size = sizeof(Ele

mTyp)

(Up-Low+1) – 建立数组类型的内部表示;

Size

KindarrayTy

Low

Up

ElemTy

6.3 类型的语义分析

结构体– 对每个域名标识符,建立其类型的内部表示; – 将所有域的指针链起来形成一个链,表示结构

体; – 将各个域的size的和作为结构体的size; – 建立结构体的内部表示;

Size

Kind structTy

Body

6.3 类型的语义分析

联合体– 对每个域名标识符,建立其类型的内部表示(每个域

的偏移都是0); – 将所有域的指针链起来形成一个链,表示联合体; – 将size最大的域的size作为联合体的size; – 建立联合体的内部表示;

Size

Kind unionTy

Body

6.3 类型的语义分析

指针类型– 取得基类型的指针; – 建立指针类型的内部表示;

递归类型– Typedef struct treenode

{ int val; struct treenode * left; struct treenode * right;}TreeNode; – 方法: 回填;

第六章 语义分析 6.1 语义分析概述

6.2 符号表 6.3 类型的语义分析 6.4 声明的语义分析 6.5 程序体的语义分析 6.6 属性文法和动作文法

…… 此处隐藏:375字,全部文档内容请下载后查看。喜欢就下载吧 ……
第六章 语义分析(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/2274181.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)