编译原理-金成植--第5章-语义分析.pptVIP

编译原理-金成植--第5章-语义分析.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章 语义分析 语义分析基础 意义、任务、时间、方法 标识符、类型、值的内部表示 符号表 类型表达式 声明的语义分析 执行体的语义分析 语义分析概述 意义 词法分析检查程序拼写上的错误 begin: begn 123x 语法分析检查程序结构上的错误 x = x +y; y = z; 语义分析检查程序含义上的错误 int x; …… x(a,b); 语义分析概述 任务 进行语义检查和构造标识符的符号表 语义检查包括类型检查和一般的语义检查 类型检查:运算分量的类型是否相容、赋值语句左右部的类型是否相容、形参和实参的类型是否相容、函数说明中函数类型和返回值的类型是否相容等; 一般的语义检查:V[E]、V.id、V↑、y+f(a,b)、使用性标识符有否声明、定义性标识符有否重复声明、标号有否重复声明和重复定位错误等; 语义分析概述 时间 语义分为静态语义和动态语义 类型是重要的静态语义,静态语义问题主要是类型相容问题 语义分析可在语法分析或中间代码生成阶段进行 语义分析概述 方法* 语义分析包括对分析的描述和对分析算法的实现 常使用的描述语义分析的方法是属性文法 语义分析依赖语法分析,因此语义分析器分为自顶向下和自底向上两种 本章采用递归下降法描述语义分析过程 标识符、类型、值的内部表示 标识符的内部表示 标识符的种类:常量标识符、类型标识符、变量标识符、函数标识符、过程标识符、记录域标识符 TYPE idkind=( consKind, typeKind, varKind, fieldKind, procKind,funcKind ) 内部表示: 常量 类型 变量 域名* 过/函 例有声明如下: 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 的属性表示,假设整数类型占1个单元,实数类型占2个单元。 类型的内部表示 类型的种类:标准、子界、枚举、数组、记录、 集合、文件、指针类型等等。 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)] 符号表 符号表的作用:为语义检查和代码生成提供标识符的语义信息 符号表的框架: (id,Attribute(id)) 线性表结构(顺序查表法); 二叉树结构(二分查表法); Hash表(散列查表法); 有关符号表的操作: 添加、查询、局部化处理 标识符的特点 标识符的出现:定义性出现和使用性出现 标识符的作用域:标识符在程序中起作用的范围。 嵌套作用域规则:当存在标

文档评论(0)

1243595614 + 关注
实名认证
文档贡献者

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档