属性文法.ppt

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章 属性文法和语法制导翻译
从本章开始,我们介绍有关语义分析及翻 译的问题。其处理的方法主要是属性文法和语 法制导翻译方法。
本章中,我们将首先介绍属性文法的基本 概念,然后介绍基于属性文法的处理方法,讨 论如何自上而下分析和自下而上分析中实现属 性计算。
本章重点掌握: 6.1 属性文法 6.2 基于属性文法的处理方法 6.3 S—属性文法的自下而上计算 6.4 L—属性文法和自顶向下翻译。
+
n T.val = 10
T.val = 8
T.val = 5
*
F.val = 2
F.val = 8
F.val = 5
digit.lexval = 2
digit.lexval = 8 digit.lexval = 5
分析树各结点属性的计算可以自下而上地完成
E.val = 8
L E.val = 18
+
n T.val = 10
T.val = 8
T.val = 5
*
F.val = 2
F.val = 8
F.val = 5
digit.lexval = 2
digit.lexval = 8 digit.lexval = 5
分析树各结点属性的计算可以自下而上地完成
E.val = 8
L E.val = 18
基本概念 编译系统的两类翻译:
非语法制导的翻译
语法制导的翻译:以语法分析为主导的语义 处理--在源程序的语法分析中嵌入语义处 理。即,利用源程序的文法框架生成中间代 码或目标代码。
Tips:语义学:semantics
lexeme
lexicon
semantic
6.1 属性文法
属性文法是在上下文无关文法的基础上为每个 文法符号(终结符或非终结符)配备若干个相关的 “值”(称为属性)。这些属性代表与文法符号相 关的信息,例如它的类型、值、代码序列、符号表 内容等等。属性和变量一样,可以进行计算和传递。
+
n T.val = 10
T.val = 8
T.val = 5
*
F.val = 2
F.val = 8
F.val = 5
digit.lexval = 2
digit.lexval = 8 digit.lexval = 5
分析树各结点属性的计算可以自下而上地完成
+
n T.val = 10
T.val = 8
T.val = 5
*
F.val = 2
F.val = 8
F.val = 5
digit.lexval = 2
digit.lexval = 8 digit.lexval = 5
分析树各结点属性的计算可以自下而上地完成
E.val = 8
L E.val = 18
+
n T.val = 10
T.val = 8
T.val = 5
*
F.val = 2
F.val = 8
F.val = 5
digit.lexval = 2
digit.lexval = 8 digit.lexval = 5
分析树各结点属性的计算可以自下而上地完成
E.val = 8
L E.val = 18
b:=f(c1,c2,…,ck) 这里f是一个函数,而且或者
(1)b是A的一个综合属性并且c1,c2,…ck是产生式右边文 法符号的属性;或者
(2)b是产生式右边某个文法符号的一个继承属性并且 c1,c2,…ck是A或产生式右边任何文法符号的属性。
在这两种情况下,我们都说属性b依赖于属性c1,c2…,ck。 (1)终结符只有综合属性,它由词法分析器提供;
属性一般分为两类:综合属性和继承属性。简 单的说,综合属性用于“自下而上”传递信息,而 继承属性用于“自上而下”传递信息。
属性加工的过程即是语义处理的过程,对于文 法的每一个产生式都配备了一组属性的计算规则, 则称为语义规则。
在一个属性文法中,对应于每个产生式A都 有一套与之相关联的语义规则,每条语义规则的形 式为:
性和出现在产生式右边的综合属性不由所给的产生式的属性计
算规则进行计算,它们由其它产生式的属性规则计算,由属性 计算器的参数提供。(解释,为什么?)
语义规则所描述的工作:属性计算、静态 语义检查、符号表操作、代码生成等。语义规 则可能产生副作用(如产生代码),也可能不 是变元的严格函数(如某个规则给出可用的下 一个数据单元的地址)。这样的语义规则通常 写成过程调用,或过程段。P137例 综合属性:
+
n T.val = 10
T.val = 8
T.val = 5
*
F.val = 2
F.val = 8
F.val = 5
digit.lexval = 2
digit.lexval = 8 digit.lexval = 5
分析树各结点属性的计算可以自下而上地完成
E.val = 8
L E.val = 18
(2)非终结符既可以有综合属性也可以有继承属性,文法
开始符号的所有继承属性作为属性计算前的初始值。
一般来讲,对出现在产生式右边的继承属性和出现在产
生式左边的综合属性都必须提供一个计算规则,属性计算规则
中只能使用相应产生式的文法符号的属性,这有利于产生式范
围内“封装”属性的依赖性。然而出现在产生式左边的继承属
+
n T.val = 10
T.val = 8
T.val = 5
*
F.val = 2
F.val = 8
F.val = 5
digit.lexval = 2
digit.lexval = 8 digit.lexval = 5
分析树各结点属性的计算可以自下而上地完成
E.val = 8
L E.val = 18
在语法树中,一个结点的综合属性的值由 其子结点的属性值确定。因此,通常使用自底 向上的方法在每一个结点处使用语义规则计算 综合属性的值。仅仅使用综合属性的属性文法 称S—属性文法。P137例6.1
例 简单台式计算器的语法制导定义
产生式
语义规则
LEn
print (E.val)
E E1 + T
E.val := E1 .val + T.val
ET T T1 * F
E.val := T.val T.val := T1.val * F.val
TF F (E) F digit
T.val := F.val F.val := E.val F.val al = 8
L E.val = 18
相关文档
最新文档