- 1、本文档共44页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]第05章 语义分析上
第05章 语义分析 主要内容: 语义分析基础 符号表 类型分析 声明和执行体的语义分析 5.1 语义分析基础 语义分析的内容 标识符的内部表示 类型的内部表示 值的内部表示 5.1.1 语义分析的内容 语法和语义的区别: 语法:关于什么样的字符串才是该语言在组 成结构上合法的程序的法规。 语义:关于结构上合法的程序的意义的法 则。 语义种类: 静态语义:在编译阶段能检查的语义。 动态语义:只有在目标代码执行阶段才能 检查的语义。 语义分析的内容: 类型分析; 标识符相关信息。 语义分析的功能: 检查语义错误; 构造标识符属性表(符号表)。 语义分析的实现: 与语法分析相结合。 5.1.2 标识符的内部表示 标识符种类: 常量名、类型名、变量名、函数名、过程名、域名。 typedef enum=(constKind,typeKind,varKind, procKind,funcKind,fieldKind) 标识符属性(AttributeIR): Access:等于dir(直接变量)或indir(间接变量); Level:表示变量所在的层数; Off:表示变量在过程等中的偏移量。 例,有声明如下: 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 的属性表示。 符号表的C语言描述如下(见p154): Typedef enum{consKind,typeKind,varKind, fieldKind,procKind,funcKind} idKIND; Typedef enum{dir,indir} AccessKIND; Typedef enum{formal ,acttual } paramKIND; Typedef struct{ idNAME id_name; idATTRIBUTE id_attribute; //标识符属性域 symbolTABLE *next } symbolTABLE //符号表 Typedef struct{ idTYPE* id_type; idKIND id_kind; idBODY id_body; //标识符的BODY } idATTRIBUTE; //标识符属性域 Typedef struct{ constidBODY const_id_body;//常量属性 varidBODY var_id_body; //变量属性 profunidBODY profunc_id_body;//过函 } idBODY; //标识符的BODY Typedef struct{ constTYPE Const_value; } constidBODY; //常量属性域BODY Typedef struct{ AccessKIND access_mode; int var_id_level; int var_id_offset; } varidBODY; //变量属性域BODY Typedef struct{ int pro_id_level; paramKIND param_kind;
文档评论(0)