网站大量收购独家精品文档,联系QQ:2885784924

第8讲语义算法报告.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8讲语义算法报告

第8 语义分析 目的:计算编译过程所需的附加信息。 特点:规律性不强,不同语言差别很大。 主要内容: 常量表达式提前计算,如: x=3.14/3 构造符号表,如变量声明时,填符号表。如:int x,y; 类型检查,如变量引用时,类型检查。 类型匹配, 表达式和语句计算时,数据类型是否 匹配。 如:x=y*z; 作用域判断,如同名变量在不同的块内,有不同的作用域。 1 属性和属性文法 属性:语言实体的特性,如变量的类型,表达式的值等 属性文法:用属性文法表示语义,也称作语法制导语义, 即语法规则中的语义。 设有语法(文法)规则X0?X1X2…Xn 每个文法符号有属性Xi.aj 存在语义规则: Xi.aj = fij(X0.a1,…,X0.ak, …, X1.al, …, Xn.a1, …Xn.ak) 对语法规则有相应的语义规则(属性文法表示), 文法规则 语义规则 规则1 . . 规则n 相应的属性等式 . . 相应的属性等式 例 1 无符号整数文法 Number ? number digit | digit Digit ? 0|1|2|3|4|5|6|7|8|9 语义属性: 数的值 (计作 val), 相应的属性文法如下: 对于数345用分析树显示属性计算如下: 文法: Number ? number digit | digit Digit ? 0|1|2|3|4|5|6|7|8|9 number (val=34*10+5=345) number (val=3*10+4=34) digit (val=5) number (val=3) digit (val=4) digit (val=3) 3 4 5 字符’0’的值是48 字符’3’的值是51 例 2 考虑如下算术表达式文法: Exp ? exp + term | exp-term | term Term ? term*factor | factor Factor ? (exp)| number 属性文法如下: 表达式(34-3)*42的属性计算 exp (val=1302) term (val=31) factor (val=42) exp (val=34-3=31) factor (val=3) - ) factor (val=34) number (val=34) term (val=31*42=1302) ( number (val=42) term (val=3) exp (val=34) number (val=3) term (val=34) 例 3 变量声明文法: Decl ? type var-list Type?int | float Var-list?id, var-list |id 属性为数据类型(计作dtype ) 串 float x,y 的属性计算: decl type (dtype=real) Var_list (dtype=real) Id(x) (dtype=real) Var_list (dtype=real) float , Id(y) (dtype=real) 例 4 数可以用八进制或十进制表示文法 Based-num ? num basechar Basechar ? o|d Num ? num digit | digit Digit ? 0|1|2|3|4|5|6|7|8|9 属性为 base 和 val 2 属性计算算法 ●基于规则的方法 基于规格的属性赋值依赖于对语法树的遍历。 (1)合成属性 在分析树或语法树中父节点的属性都依赖于子节点的属性,则具有合成属性,相应文法称S属性文法。 合成属性可通过对分析树或语法树后序遍历计算出。 例 求表达式3*(x+2)的数据类型 op 1 (*) dtype=? Const 2 (3) dtype=int Op 3 (+) dtype=? id 4 (x) dtype=int const 5 (2) dtype=int 后序遍历:2 4 5 3 1 结点 2 4 5 3 1 属性计算 int int int int int 合成属性计算的后序遍历算法: Procedure PostEval (T :treenode) Begin For each child C of T do PostEval(C); 计算T的所

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档