6-第六章语义分析-1-2-3节.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 6.1 语义分析概述 6.2 中间代码的形式 6.3 算术表达式、赋值语句到四元式的翻译 6.4 布尔术表达式到四元式的翻译 6.5 控制语句到四元式的翻译 6.6 标号和转移语句到四元式的翻译 6.7 数组元素引用到四元式的翻译 6.8 说明语句到四元式的翻译 第6章 语法制导翻译和中间代码生成 §6.1 语义分析概述 在词法分析和语法分析的基础上,分析所写源程序的 含义,并生成完成相同功能的中间语言代码。 静态语义检查,如: 类型 —— 运算、作用域 (整型量赋实型值); 名字 —— 先定义后引用; 数组维数、越界; 控制流 —— 对break,有包围它的循环; 语义处理,生成中间代码。如: 变量的存储分配; 语句的翻译(语义分析主要工作); 1. 语义分析的任务 为每个产生式,构造一个语义子程序Subi , 语义程序包括:⑴ Subi (针对每一条产生式) ⑵ Comj (公共子程序) 中间代码 Par1,Par2…Park Ret1,Ret2…Reth 语法分析程序 语义分析 程序 Sub1 Sub2 Subn … … Com1 Comm 2.语义分析程序 例:E→E1 + E2 入口参数(Par): E1.PLACE, E2.PLACE (存放E1 、E2 的值的单元地址) 返回参数(Ret): E.PLACE (存放E值的单元地址) 生成中间代码 ( +, E1.PLACE, E2.PLACE, E.PLACE) 中间代码 Par1,Par2…Park Ret1,Ret2…Reth 语法分析程序 语义分析 程序 Sub1 Sub2 Subn … … Com1 Comm 在语法分析过程中,根据每个产生式所对应的语义规则,调用语义分析程序生成中间代码,称作语法制导翻译。 调用时刻: 自上而下语法分析: 一条产生式匹配输入串成功 自下而上语法分析: 一条产生式被用于归约 语义规则 文法(产生式) 属性文法 E→E1 + E2 { E.place:= newtemp; gen(+ , E1.place, E2.place, E.place ) } 3. 语法制导翻译 Function E: Integer ; 递归下降程序 Begin {T1.PLACE:=}T; While SYM=“+” Do Begin ADVANCE; { T2.PLACE:=} T; { Gen(+, T1.PLACE , T2.PLACE, T1.PLACE ) ;} End {E:= T1.PLACE} End 自上而下语法分析,递归下降分析法: E→T1 {+ T2 } { Gen(+,T1.place, T2.place, T1.place)} 语义子程序 自上而下语法分析,预测分析法: E’ →+TE1’ { E.place:= Newtemp; Gen(+ , T.place, E1’.place, E’.place ) } # … { act1 } E’ T + 简记为:E’ →+TE’ { act1 } 当产生式右部反向入栈时,语义子程序也入栈, 栈中内容: 当 +、T 、E’ 处理完后,调用语义子程序 act1。 自下而上语法分析调用时刻,见以后举例。 与被处理的高级语言密切相关。主要讲述内容: 算术表达式 布尔表达式 赋值语句 控制语句(分支、循环) 说明语句 数组 4. 语义程序完成的工作 例: E → E1 + E2 E .code —— E的中间代码序列 E .val —— E的值 E .PLACE —— 存放E的值的单元地址 在上下文无关文法的基础上,为每个文法符号(VN∪VT) 设置一些属性,描述与该符号相关的语义信息,如:动作、计算顺序、各属性之间的关系等。 它是一种接近形式化的语义描述方法。 5. 属性文法 说明:?不同的中间代码形式、不同的语言成份, 使用的属性不同。? 属性 综合属性(synthesized attribute) 一个结点的属性值由子结点的属性值来计算 继承属性(inh

文档评论(0)

wendan118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档