六语义分析().pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
六语义分析()

数组类型的内部表示 ElemTy: 指向数组成分类型的指针; size = sizeof(ElemTy)? (Up-Low+1) Size Kind Low Up ElemTy arrayTy 例:array [2..9] of integer; (8, arrayTy, 2, 9, intPtr) int a[7]; (7, arrayTy, 0, 6, intPtr) 结构体类型的内部表示 Size Kind Body strutTy Size: 所有域的类型的size的总和; Body:是域名标识符的内部表示链; Body FieldType Offset Next FieldName 例: typedef struct { int i; char name[10]; float x; }example; example wang; example factory_a[100]; 联合类型的内部表示 Size Kind Body unionTy Body: 指向联合体中域定义链表 Size: 所有域的类型的size中最大值; Body FieldType Next FieldName 例: typedef union{ int i; char name[10]; float x; } test; test lee; test factory_b[100]; 指针类型的内部表示 Size Kind BaseType pointerTy BaseType: 指向指针的基类型; Size:指针的空间大小(通常为1个单元); 例: int* p1; float* p2; int *p3[10]; int (*p4)[10]; int* (p5[10]); int** p6; int*(*p7)[10]; 枚举类型的内部表示 Size Kind EList enumTy EList: 枚举常量链表; Size:枚举类型值的空间大小(通常为1个单元); 例: enum color {red, yellow, blue}; enum day {car , bus = 0, taxi, ship = 5, plane}; 值的内部表示 可表示的值 int float false, true(通常对应0和1) char: ASCII码值 枚举类型: 对应整数 结构值 数组 结构 联合 指针 知识关系图 语义分析 需要标识符的更多信息 符号表 标识符的属性 标识符的内部表示 类型的内部表示 值的内部表示 * * * * * * * * * * * * * * * * * * * * 语义分析在编译程序中的作用 词法分析 语法分析 语义分析 中间代码优化 中间代码生成 目标代码生成 分析 合成 第六章 语义分析 6.1 语义分析概述 6.2 符号表 6.3 类型的语义分析 6.4 声明的语义分析 6.5 程序体的语义分析 6.6 属性文法和动作文法 6.1 语义分析概述 语法(Syntax)和语义(Semantics)的区别 语义分析的必要性 程序设计语言语义的分类 如何描述程序设计语言的语义? 语义分析的主要任务 语法和语义的区别 语法: 是描述一个合法定义的程序结构的规则 例如:函数调用语句 ? id( 实参表达式) 语义: 说明一个合法定义的程序的含义 int x; float* f(); x(); x = f(); 符合变量声明的语法、语义 符合函数声明的语法、语义 符合函数调用的语法、不符合语义 符合赋值语句的语法、不符合语义 语义分析的必要性 一个语法正确的程序不能保证它是有意义的! 程序中容易出现各种语义错误: 标识符未声明 y = x+3; 操作数的类型与操作符的类型不匹配 y = x*3; 数组下标变量的类型出错 A[x]; …… 语义分析不能检查程序在计算逻辑上的错误!!!! 程序设计语言语义的分类 静态语义(static semantics) 编译时(compile-time)可以检查的语义 例如:标识符未声明 标识符重复声明 动态语义(dynamics semantics) 目标程序运行时(run-time)才能检查的语义 例如:除零溢出错误 x/(y-i); 当 y = i时 数组下标越界 int a[5]; a[5] =0; 无效指针 int*p; p =NULL; *p = 3; 静态语义动态语义 #define a (x+1) int x = 2; void b() { int x = 1;

文档评论(0)

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

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档