第05章-语义分析上课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第05章-语义分析上课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 05 语义 分析 上课
- 资源描述:
-
1、1编译原理电子教案韶关学院计算机系程细柱第第0505章章 语义分析语义分析主要内容:主要内容:.语义分析基础语义分析基础.符号表符号表.类型分析类型分析.声明和执行体的语义分析声明和执行体的语义分析2编译原理电子教案韶关学院计算机系程细柱5.1 5.1 语义分析基础语义分析基础 语义分析的内容语义分析的内容 标识符的内部表示标识符的内部表示 类型的内部表示类型的内部表示 值的内部表示值的内部表示3编译原理电子教案韶关学院计算机系程细柱5.1.1 5.1.1 语义分析的内容语义分析的内容语法和语义的区别语法和语义的区别:语法:语法:关于什么样的字符串才是该语言在组关于什么样的字符串才是该语言在组
2、 成结构上合法的程序的法规。成结构上合法的程序的法规。语义:语义:关于结构上合法的程序的意义的法关于结构上合法的程序的意义的法 则。则。4编译原理电子教案韶关学院计算机系程细柱 语义种类语义种类:静态语义:静态语义:在编译阶段能检查的语义。在编译阶段能检查的语义。动态语义:动态语义:只有在目标代码执行阶段才能只有在目标代码执行阶段才能 检查的语义。检查的语义。5编译原理电子教案韶关学院计算机系程细柱 语义分析的语义分析的内容内容:类型分析;类型分析;标识符相关信息。标识符相关信息。语义分析的功能:语义分析的功能:检查语义错误;检查语义错误;构造标识符属性表(符号表)。构造标识符属性表(符号表)
3、。语义分析的实现:语义分析的实现:与语法分析相结合。与语法分析相结合。6编译原理电子教案韶关学院计算机系程细柱5.1.2 标识符的内部表示标识符的内部表示Z 标识符种类:标识符种类:常量名、类型名、变量名、函数名、过程名、域名。常量名、类型名、变量名、函数名、过程名、域名。typedeftypedef enumenum=(=(constKind,typeKind,varKindconstKind,typeKind,varKind,procKind,funcKind,fieldKindprocKind,funcKind,fieldKind)Z 标识符属性(标识符属性(AttributeIRAtt
4、ributeIR):):常量:常量:consKindTypePtrKindValue类型:类型:typeKindTypePtrKind TypePtr:指类型的内部表示;指类型的内部表示;Value:常量值。常量值。TypePtr:指类型的内部表示;指类型的内部表示;7编译原理电子教案韶关学院计算机系程细柱 Access:等于等于dir(直接变量直接变量)或或indir(间接变量间接变量);Level:表示变量所在的层数;表示变量所在的层数;Off:表示变量在过程等中的偏移量。表示变量在过程等中的偏移量。变量:变量:varKindTypePtrKindAccessLeveloff Off:表示
5、域名在记录中的偏移量;表示域名在记录中的偏移量;HostType:表示域名对应类型的内部表示。表示域名对应类型的内部表示。域名:域名:fieldKindTypePtrKindOffHostType8编译原理电子教案韶关学院计算机系程细柱 Parm:表示值参信息表地址;表示值参信息表地址;Class:为为actual时表示实在过程时表示实在过程/函数名,为函数名,为formal时表示形参过程时表示形参过程/函数名;函数名;Code:表示过程表示过程/函数的目标代码地址;函数的目标代码地址;Size:表示本过程表示本过程/函数的空间大小;函数的空间大小;Forward:为为true时表示向前声明。
6、时表示向前声明。过函:过函:routKindTypePtrKindLevel ParmClassCode Size ForwardactualroutKindTypePtrKindLevel ParmClassOffformal9编译原理电子教案韶关学院计算机系程细柱b 例,有声明如下:例,有声明如下:const const paipai=3.14;=3.14;type vector=array1.10 OF integer;type vector=array1.10 OF integer;varvar x,y:real;x,y:real;r,s:vector;r,s:vector;设当前层数
7、和可用设当前层数和可用offsetoffset值分别为值分别为L L和和0 0,构造标识符,构造标识符 paipai,vector,x,y,r,vector,x,y,r 和和s s 的属性表示。的属性表示。pai:consKindrealPtr3.14vector:typeKindaPtrx:varKindrealPtrdirL0y:varKindrealPtrdirL1r:varKindaPtrdirL2s:varKindaPtrdirL1210编译原理电子教案韶关学院计算机系程细柱符号表的符号表的C语言描述如下语言描述如下(见见p154):Typedef enumconsKind,type
8、Kind,varKindconsKind,typeKind,varKind,fieldKind,procKind,funcKindfieldKind,procKind,funcKind idKIND;Typedef enumdir,indir AccessKIND;Typedef enumformal,acttual paramKIND;Typedef structstruct idNAME id_name;idATTRIBUTE id_attribute;/标识符属性域标识符属性域 symbolTABLE *next symbolTABLE/符号表符号表11编译原理电子教案韶关学院计算机系程
9、细柱 Typedef structstruct idTYPE*id_type;idKIND id_kind;idBODY id_body;/标识符的标识符的BODYBODY idATTRIBUTE;/标识符属性域标识符属性域 Typedef structstruct constidBODY const_id_body;/常量常量属性属性 varidBODY var_id_body;/变量变量属性属性 profunidBODY profunc_id_body;/过函过函 idBODY;/标识符的标识符的BODYBODY12编译原理电子教案韶关学院计算机系程细柱 Typedef structstr
10、uct constTYPE Const_value;constidBODY;/常量常量属性域属性域BODY Typedef structstruct AccessKIND access_mode;int var_id_level;int var_id_offset;varidBODY;/变量变量属性域属性域BODY13编译原理电子教案韶关学院计算机系程细柱 Typedef structstruct int pro_id_level;paramKIND param_kind;profuncBOX profunc_box;/过函过函BOX profuncidBODY;/过程函数名的过程函数名的BO
11、DY14编译原理电子教案韶关学院计算机系程细柱 Typedef union union structstruct paramLIST*param_list;codeADDR code_addr;int space_size;boolean forward;actual_profunc_box;/实在过函实在过函 structstruct intint Off;Off;formal_profunc_box;/形参过函形参过函 profuncBOX;/过函过函BOX15编译原理电子教案韶关学院计算机系程细柱5.1.3 5.1.3 类型的内部表示类型的内部表示(p155p155)Z 类型的种类:类型
12、的种类:标准、枚举、数组、记录、联合、指针类型等。标准、枚举、数组、记录、联合、指针类型等。TypeKindTypeKind=(=(intTy,boolTy,charTy,realTy,voidTyintTy,boolTy,charTy,realTy,voidTy,enumTy,enumTy,arrayTy,recordTy,unionTy,pointerTyarrayTy,recordTy,unionTy,pointerTy)Z 内部表示:内部表示:(TypeIRTypeIR)标准类型:标准类型:KindSizeenum:EListKindSize EList:枚举表内部表示地址;枚举表内部
13、表示地址;ElemType:数组元素类型指针;数组元素类型指针;array:ElemTypeKindSizeLowUp16编译原理电子教案韶关学院计算机系程细柱RecBodyKindSizerecord:BaseTypeKindSizePointer:RecBody:指向记录类型的域表链;指向记录类型的域表链;UniBody:指向联合类型的域表链;指向联合类型的域表链;BaseType:指针的基类型。指针的基类型。NextOffFieldNameRecBody:FieldTypeUniBodyKindSizeunion:17编译原理电子教案韶关学院计算机系程细柱b例例,有如下的类型定义:,有如
14、下的类型定义:(P158)(P158)at=array1.10 of array 1.100 of integer;at=array1.10 of array 1.100 of integer;其内部表示如下:其内部表示如下:atPtr:arrayTy1000110arrayTy1001intPty10018编译原理电子教案韶关学院计算机系程细柱rtrt=record =record x x:real:real;a a:at:at;endendutut=union =union s s:at:at;u u:rt:rt;endend其内部表示如下:其内部表示如下:recordTy1001real
15、Ptrx0atPtra1 rtPtr:unionTy1001atPtrsrtPtru utPtr:19编译原理电子教案韶关学院计算机系程细柱类型内部结构的类型内部结构的C语言描述如下:语言描述如下:Typedef structstruct int size;TypeKind type_kind;union struct intTy;struct boolTy;struct charTy;struct realTy;struct IdList*EnumBody;enumTy;struct int Low;int Up;TYPEIR*ElemType;arrayTy;struct RecBodyI
16、R*RecBody;recordTy;struct UniBodyIR*UniBody;unionTy;struct TYPEIR *BaseType;pointerTy;Type_Body;TYPEIR20编译原理电子教案韶关学院计算机系程细柱 Typedef structstruct String Name;IdList*Next IdList;/枚举表内部表示地址;枚举表内部表示地址;Typedef structstruct String FieldName;TYPEIR*FieldType;int Off;RecBodyIR *Next;RecBodyIR;/记录类型的域表链;记录类型
17、的域表链;Typedef structstruct String FieldName;TYPEIR*FieldType;UniBodyIR *Next;UniBodyIR;/联合类型的域表链;联合类型的域表链;21编译原理电子教案韶关学院计算机系程细柱5.1.4 5.1.4 运行时值的表示运行时值的表示Z非结构类型有:非结构类型有:整型、实型、布尔类型、字符类型、整型、实型、布尔类型、字符类型、枚举类型、子界类型、指针类型枚举类型、子界类型、指针类型Z有序类型:有序类型:以上类型,除以上类型,除实型实型、指针指针外外22编译原理电子教案韶关学院计算机系程细柱有序类型的常量表示:有序类型的常量表
18、示:Z 整型常量:整型常量:ord(Nord(N)=N)=NZ 布尔常量:布尔常量:ord(falseord(false)=0,)=0,ord(trueord(true)=1)=1Z 字符常量:字符常量:ord(Cord(C)=ASC(C)=ASC(C)Z 枚举常量:枚举常量:设有枚举类型设有枚举类型(D,A,B),D,A,B),则有则有 ord(Dord(D)=0,ord(A)=1,ord(B)=2)=0,ord(A)=1,ord(B)=2Z 子界常量:子界常量:设有子界类型设有子界类型C C1 1.C.C2 2,则值空间则值空间 为为 ord(Cord(C1 1).ord(C).ord(C
19、2 2)23编译原理电子教案韶关学院计算机系程细柱5.2 符号表符号表Z 标识符的作用:标识符的作用:为语义检查和代码生成提供为语义检查和代码生成提供标识符的语义信息。标识符的语义信息。声明部分:声明部分:定义了各种对象及对应的属性和定义了各种对象及对应的属性和 使用规则。使用规则。程序体:程序体:对所定义的对象进行各种操作。对所定义的对象进行各种操作。$idididnameidnameidnameidname AttributeIRAttributeIRZ 必要性必要性 TokenToken:新表新表符号表符号表(种类、类型等信息):(种类、类型等信息):24编译原理电子教案韶关学院计算机系
20、程细柱Z 有关符号表的操作:有关符号表的操作:添加、作用域删除、查询添加、作用域删除、查询Z 处理符号表的模块:处理符号表的模块:定义符号表数据结构定义符号表数据结构 定义符号表上的操作定义符号表上的操作Z 标识符的处理思想:标识符的处理思想:遇到定义性标识符时,在符号表中填写被定遇到定义性标识符时,在符号表中填写被定义标识符的符号项;义标识符的符号项;当遇到使用性标识符时,用该标识符查符号当遇到使用性标识符时,用该标识符查符号表求得其属性。表求得其属性。25编译原理电子教案韶关学院计算机系程细柱标识符的作用域:标识符的作用域:标识符有效的最大程序段。标识符有效的最大程序段。嵌套作用域规则:嵌
展开阅读全文