第六章语义分析和符号表_第1页
第六章语义分析和符号表_第2页
第六章语义分析和符号表_第3页
第六章语义分析和符号表_第4页
第六章语义分析和符号表_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、主要内容:主要内容:. 语义分析概述语义分析概述( (必要性、功能、描述方法必要性、功能、描述方法) ). 符号表符号表. 类型表达式类型表达式. 声明和程序体的语义分析声明和程序体的语义分析语法和语义的区别语法和语义的区别: : 语法:语法:关于什么样的字符串才是该语言关于什么样的字符串才是该语言 在组成结构上合法的程序的法则。在组成结构上合法的程序的法则。 语义:语义:关于结构上合法的程序的意义的关于结构上合法的程序的意义的 法则。法则。 语义种类语义种类 静态语义:静态语义:在编译阶段在编译阶段( (从程序文本上从程序文本上) )可可 以检查的语义。以检查的语义。 动态语义:动态语义:通

2、过程序的执行才能检查的语通过程序的执行才能检查的语 义。义。 语义的描述语义的描述语义形式化方法:语义形式化方法: 1. 1. 操作语义操作语义 2. 2. 指称语义指称语义 3. 3. 公理语义公理语义 4. 4. 代数语义代数语义 语义分析的内容:语义分析的内容: 类型分析类型分析 标识符相关信息标识符相关信息 语义分析的功能:语义分析的功能: 检查语义错误检查语义错误 构造标识符属性表(符号表)构造标识符属性表(符号表) 语义分析的实现:语义分析的实现: 与语法分析相结合与语法分析相结合语义分析语义分析语法分析树语法分析树TokenListTokenList语义定义语义定义自然语言描述规

3、定自然语言描述规定符号表符号表判定判定 标识符的内部表示标识符的内部表示 类型的内部表示类型的内部表示 值的内部表示值的内部表示三种内部表示三种内部表示CodeCodeZ 标识符种类:标识符种类: 常量名、类型名、变量名、函数名、过程名、域名。常量名、类型名、变量名、函数名、过程名、域名。 TYPE idkind=( consKind, typeKind, varKind, fieldKind, procKind,funcKind )Z 内部表示(内部表示(AttributeIR):): 常量:常量: 类型:类型: 变量:变量: 域名域名*: 过函:过函:ValueValueKindKindT

4、ypePtrTypePtrForwardForwardKindKindTypePtrTypePtrOffOffLevelLevelAccessAccessKindKindTypePtrTypePtrHostTypeHostTypeOffOffKindKindTypePtrTypePtrSizeSize ForwardForwardClassClassParmParmLevelLevelKindKindTypePtrTypePtrOffOffb 例有声明如下:例有声明如下: CONST pai= 3.14 ;CONST pai= 3.14 ; TYPE vector=ARRAY1.10 OF i

5、nteger; TYPE vector=ARRAY1.10 OF integer; VAR x, y : real ; VAR x, y : real ; r, s : vector ; r, s : vector ; 设当前层数和可用设当前层数和可用offsetoffset值分别为值分别为L L和和0 0,构造标识符构造标识符 pai, vector, x, y, r pai, vector, x, y, r 和和s s 的属性表示。的属性表示。Z 类型的种类:类型的种类:标准、子界、枚举、数组、记录、标准、子界、枚举、数组、记录、 集合、文件、指针类型等等。集合、文件、指针类型等等。 Ty

6、peKind=(intTy,boolTy,charTy,realTy,enumTy, subTy,arrayTy,recordTy,setTy,fileTy,pointerTy)Z 内部表示:内部表示:( (TypeIR)TypeIR) 标准类型:标准类型: sub: enum: array: UpLowHostTypeKindSizeLengElemsKindSizeElemTypeIndexTypeKindSizeKindSizerecord: FixBody: VariBody:set: file:pointer: VariBodyFixBodyKindSizeNextOffFixUni

7、tTypeidVariUnitsCaseUnitNextVariBodyFixBodyOffCaseTypeidBaseTypeKindSizeCompTypeKindSizeTypeNameKindSizeb例有如下的类型定义:例有如下的类型定义: at = ARRAY 1.10 OF at = ARRAY 1.10 OF ARRAY1.100 OF integer; ARRAY1.100 OF integer; rt = RECORD x : real ; a : at; rt = RECORD x : real ; a : at; CASE u: boolean OF CASE u: b

8、oolean OF false:(k : integer); false:(k : integer); true:(y: real; b: boolean) true:(y: real; b: boolean) END END 构造类型的内部表示。构造类型的内部表示。Z 非结构类型值的内部表示:非结构类型值的内部表示: 实型实型 指针指针 有序类型:整数形式有序类型:整数形式 有序类型的常量表示:有序类型的常量表示: Z 整型常量:整型常量:ord(N) = Nord(N) = NZ 布尔常量:布尔常量:ord(false)=0, ord(true) = 1ord(false)=0, ord(

9、true) = 1Z 字符常量:字符常量:ord(C) = ASC (C)ord(C) = ASC (C)Z 枚举常量:枚举常量:设有枚举类型设有枚举类型( (D,A,B),D,A,B),则有则有 ord(D)=0,ord(A)=1,ord(B)=2ord(D)=0,ord(A)=1,ord(B)=2Z 子界常量:子界常量:设有子界类型设有子界类型C C1 1.C.C2 2, ,则值空间则值空间 为为 ord(Cord(C1 1).ord(C).ord(C2 2)Z 标识符的作用:标识符的作用: 声明部分:定义了各种对象及对应的属性和声明部分:定义了各种对象及对应的属性和 使用规则。使用规则。

10、 程序体:对所定义的对象进行各种操作。程序体:对所定义的对象进行各种操作。$ $idididnameidnameIdnameIdname AttributeIRAttributeIRZ 必要性必要性 TokenToken: 新表符号表(种类、类型等信息):新表符号表(种类、类型等信息):Z 有关符号表的操作:有关符号表的操作: 添加、作用域删除、查询添加、作用域删除、查询Z 处理符号表的模块:处理符号表的模块: 定义符号表数据结构定义符号表数据结构 定义符号表上的操作定义符号表上的操作符号表的作用:符号表的作用:为语义检查和代码生成提供为语义检查和代码生成提供 标识符的语义信息。标识符的语义信

11、息。标识符的处理思想:标识符的处理思想: 遇到定义性标识符时,在符号表中填写遇到定义性标识符时,在符号表中填写 被定义标识符的符号项;被定义标识符的符号项; 当遇到使用性标识符时,用该标识符查当遇到使用性标识符时,用该标识符查 符号表求得其属性。符号表求得其属性。标识符的作用域:标识符的作用域:标识符有效的最大程序段标识符有效的最大程序段嵌套作用域规则:嵌套作用域规则:当存在标识符的嵌套声明当存在标识符的嵌套声明时,最近定义的属性为标识符的当前属性时,最近定义的属性为标识符的当前属性局部化单位:局部化单位:允许有声明的程序段允许有声明的程序段P:P:Var x ,y,zVar x ,y,zVa

12、r x,m,nVar x,m,nx:=1;x:=1;m:=x+1;m:=x+1;y:=x+1;y:=x+1;x:=0;x:=0;Q:Q:lProc p(lFunc f(l形式过形式过/函函 p( f(lRecord begin符号表的种类:符号表的种类:全局符号表、局部符号表全局符号表、局部符号表原则:原则: 进入一个局部化区时,记录本层符号表的进入一个局部化区时,记录本层符号表的位置位置 遇到定义性标识符时,构造其语义信息,遇到定义性标识符时,构造其语义信息,查本层符号表,若存在,则有重复声明错查本层符号表,若存在,则有重复声明错误,否则将语义信息填入表中误,否则将语义信息填入表中 遇到一个

13、使用性标识符时,查表(从里层遇到一个使用性标识符时,查表(从里层到外层),查不到则有未定义标识符错到外层),查不到则有未定义标识符错误,否则构造新的误,否则构造新的TOKENTOKEN 退出一个局部化区时,作废本层符号表退出一个局部化区时,作废本层符号表标识符处理的原则标识符处理的原则用局部符号表实现用局部符号表实现proc p:x,y,zproc p:x,y,zproc p1:x,y1,z1proc p1:x,y1,z1proc p2:yproc p2:yy,zy,zx,y1,z1,yx,y1,z1,yproc p3:z,aproc p3:z,ax,y,ax,y,ax,zx,z用全局符号表实

14、现用全局符号表实现proc p0:x,yproc p0:x,yproc p1:x,zproc p1:x,zy yproc p2:x1,y1proc p2:x1,y1y yx,z x,z program p()program p()type at=array1.100 of array1.10 of intetertype at=array1.100 of array1.10 of intetervar x:real; a:at; i:integer;var x:real; a:at; i:integer;proc p1(var a1:atproc p1(var a1:at; a2:at)a2:

15、at)var x:integer; a:real;var x:integer; a:real;proc p2(n:integer)proc p2(n:integer)var m:1.50; x:real;var m:1.50; x:real;m,n,x(m,n,x(使用性出现使用性出现) )endenda1,a2,x,a,ia1,a2,x,a,i(使用性出现)(使用性出现)endendx,a,ix,a,i(使用性出现)(使用性出现)endendZ 标号出现的位置:标号出现的位置: 标号声明:标号声明:label label 1 1, , 2 2, , , , n n; ; 标号定位标号定位(语

16、句前):语句前):i i:StatementStatement; 标号使用(标号使用(GotoGoto后):后):goto goto i i; ;Z 标号部分的语义错误:标号部分的语义错误: 标号重复声明;标号重复声明; 标号重复定位;标号重复定位; 标号有定位而无声明;标号有定位而无声明; 标号有使用而无定位;标号有使用而无定位; GotoGoto语句有非法转入。语句有非法转入。 设置五种表:设置五种表:LDECLDEC,LDEFLDEF,LUSELUSE,SLSL,PLPL LDECLDEC表表:( (Flag, LabelFlag, Label,); LDEFLDEF、LUSELUSE表

17、:表:( (Label)Label); SLSL表:表:(kind(kind,LDEFaddrLDEFaddr,LUSEaddr)LUSEaddr); PLPL表:表:(LDECaddr(LDECaddr,LDEFaddr)LDEFaddr);标号的语义分析原理标号的语义分析原理1 1)进入一个进入一个过过/ /函函时,将本层时,将本层LDECLDEC和和LDEFLDEF的地址填入的地址填入PLPL表。表。2 2)遇到一个标号声明遇到一个标号声明“label label 1 1, , 2 2,n n”时,建立本层时,建立本层LDECLDEC表(检表(检查重复声明错误),其中的查重复声明错误),

18、其中的FlagFlag标志均设置为标志均设置为0 0。3 3)遇到定位性标号遇到定位性标号“:Statement:Statement”时:时:l检查在检查在LDECLDEC表中有无表中有无 ,若无则表示无标号声明错误;,若无则表示无标号声明错误;l若有,则检查其若有,则检查其FlagFlag位,若是位,若是1 1,则有重复定位错误;,则有重复定位错误;l若若Flag=0Flag=0,令其,令其FlagFlag位为位为1 1,并将,并将 填入填入LDEFLDEF表中;表中;l查看查看LUSELUSE表,若其中有表,若其中有则将其删除掉。则将其删除掉。4 4)进入一个进入一个结构语句结构语句时,将本语句的时,将本语句的LDEFLDEF和和LUSELUSE表位置填表位置填入入SLSL表。表。5 5)遇到一个遇到一个“goto goto ” 时:时:l查看查看LDEFLDEF表,看其中是否有表,看其中是否有;l若无,将填入若无,将填入LUSELUSE表。表。6 6)退出一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论