编译原理总复习chap8.ppt

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

属性:编程语言结构的任意特性。 在包含的信息和复杂性等方面变化很大。 典型例子 变量的数据类型。 表达式的值。 存储器中变量的位置。 程序的目标代码。 数的有效位数。 属性计算变化极大。 可能在编译过程的任意时刻发生。 语义分析与属性计算的联系最紧密,扫描器和语法分析程序也需要某些属性信息。 三元组A=(G,V,F) G:CFG, V:有穷的属性集,每个属性与文法符号相联系(终结符或非终结符)。 F:关于属性的属性断言或谓词集。 与一个产生式相联,只引用左端或右端的终结符或非终结符相联的属性 赋值语句的形式,附在产生式后,用大括号括起来。 E?T1 + T2 {T1.type = int AND T2.type= int E.type :=int} E ?T1 or T2 {T1.type = bool AND T2.type= bool E.type :=bool} T ? number {T.type :=int} T ? true {T.type := bool} T ? false {T.type := bool} 依据属性计算的依赖关系 综合属性( synthesized ): “自下而上”传递信息 在语法树中它所有的相关都从子节点指向父节点 S属性文法:文法中所有的属性都是综合的 继承属性(inherited): “自上而下”传递信息 非综合的 两种属性依赖关系:从祖先到子孙 兄弟继承 文法符号与属性 非终结符 可有综合属性、继承属性 开始符:没有继承属性。 终结符:单词的固有属性(用户给定的),在词法分析时计算,属于综合属性。 属性计算 属性计算方式 在相关图的构造上进行:通过对相关图进行拓扑排序来决定属性的赋值顺序 基于规则的方法(语法制导翻译):依赖于语法树的遍历 几乎每个编译器都采用 在编译器构造时固定属性赋值顺序 依赖于对属性等式或语义规则的分析 在建立语法树过程中,各属性值被计算并通过赋值规则层层传递。 语法树完成时, 得到开始符的属性值。即整个程序的语义 procedure PostEval (T: treenode); begin for each child C of T do PostEval (C); compute all synthesized attributes of T; end ; E.val=6 E.val=2 + E.val=4 n.lex=2 ( E.val=4 ) E.val=3 + E.val=1 n.lex=3 n.lex=1 procedure PreEval (T: treenode); begin for each child C of T do compute all inherited attributes of C; PreEval (C); end ; 在语法分析的同时进行语义处理 若属性和属性计算规则设计合理,语义规则的计算能够在建立语法树的同时进行。 S-属性文法的自下而上计算 S-属性文法:只有综合属性。 翻译器可借助于LR分析器实现 扩充分析器,增加语义栈 保存与栈中文法符号有关的综合属性值 归约时,新的属性值就由栈中正在归约的产生式右边符号的属性值来计算。 步骤 动作 状态栈 语义栈(值栈) 符号栈 余留输入串 1) 0 - # 2+3*5# 2) 05 -- #2 +3 *5# 3) r6 03 -2 #F +3*5# 4)r

文档评论(0)

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

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

1亿VIP精品文档

相关文档