文档详情

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

发布:2017-06-19约7.29千字共38页下载文档
文本预览下载声明
* 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
显示全部
相似文档