第六章6.1属性文法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

T
F digit
*
F
digit
digit
如何通过遍历语法树求得表达式的值呢?
河北经贸大学信息技术学院
3
L→E n E→E+T E→T T→T*F
L 19 E 19 E 15 T 15 + T 4 F 4 n
T→F F → (E) F → digit
T 3
F 3 digit 3
*
F 5
digit 5
digit 4
输入串为 3 * 5 + 4 。
还有一些情况需要考虑:
河北经贸大学信息技术学院
4
例:
设产生说明语句的文法为: D→TL T → int T → real L → L , id L → id
real 是关键字,其语义是系统默认的。但 id 是 用户定义的,它的类型信息(属于 id 的语义)在词 法分析和语法分析阶段不能判定,只能由语义分析 来解决。那么,如何通过遍历语法树使 id 获得类型 信息呢?
L ⑨ 执行1
E1 ⑧ 执行2 E0
19
T2
n
15
⑤ 执行3
+
4
⑦ 执行5
T1
15
F2
4
常数表
入 值 口 1 3 相关信息 ...... T0
④ 执行4
3
② 执行5
*
F1
5
③ 执行7 ⑥ 执行7
2
3
5
4
......
......
F0
3
① 执行7
digit
3 *
digit digit
5 +
digit digit
D T real L id
河北经贸大学信息技术学院
输入串为 real id , id , id
L L
,
id
id
,
5
例:
设产生说明语句的文法为: D→TL T → int T → real L → L , id L → id 输入串为 real id , id , id real T real real 当遍历到 id 时,将 real 填入 id 所在的符号表中。
说明: ③ 非终结符 E , T , F 都有综合属性:
E { ...... int val ; /*综合属性*/ } T { ...... int val ; /*综合属性*/ }
河北经贸大学信息技术学院
F { ...... int val ; /*综合属性*/ }
14
例:
考虑一个简单计算器的属性文法:
说明: ① 出现在同一个产生式中不同位置上的同名非终结符,它们 的语义是有区别的。为了说明这种区别,给它们加了下标。但 是,它们的语法功能是一样的。
河北经贸大学信息技术学院
12
例:
考虑一个简单计算器的属性文法:
序号
1 2 3 4 5 6 7
产生式
L→ E n E → E1 + T E→T T → T1 * F T→F F → (E) F → digit
语义规则
L.in := T.type T.type := int T.type := real L1.in := L.in addtype(id.entry , L.in) addtype(id.entry , L.in)
非终结符 T 有一个综合属性 type ,L 有一个继承属性 in ,
T{ . . . . . . int type ; /* 综合属性 */ } L{ . . . . . . int in ; /* 继承属性 */ }
⑧ 执行2 ⑨ 执行1
F2.val := 4
T2.val := F2.val E1.val := E0 . val + T2.val Print(E1.val)
河北经贸大学信息技术学院
18
例:(本例旨在说明继承属性的用法)
设某种说明语句的属性文法:
序号
1 2 3 4 6
产生式
D→TL T → int T → real L → L1 , id L → id
说明: ④ 终结符 digit 有一个综合属性:
digit { int lexval ; /* 综合属性*/ }
河北经贸大学信息技术学院
这个属性值由词法分 析器提供。
15
例:
考虑一个简单计算器的属性文法:
序号
1 2 3 4 5 6 7
产生式
L→ E n E → E1 + T E→T T → T1 * F T→F F → (E) F → digit
● 当 b 是 产生式 右部某文法符号的一个继承属性时
c1 , c2 , . . . , ck 是 A 或产生式右部任何文法符号的属性。
河北经贸大学信息技术学院
9
四、构造语义规则时的原则 (1)终结符只有综合属性,它们由词法分析器提供。 (2)非终结符既可以有综合属性也可以有继承属性。文法开始 符号的继承属性值作为属性计算的初值。 (3)每一个产生式对每个出现在其右部的继承属性和出现在其 左部的综合属性都必须提供一个计算规则。在这个计算规则中 只能使用产生式内部文法符号的属性。 (4)出现在产生式右部的综合属性和出现在产生式左部的继承 属性由其它产生式的属性计算规则计算。 (5)当语义规则所须描述的动作较复杂时,也可将语义规则写 成过程调用或函数调用的形式。例如: print(E.val)
语义规则
Print(E.val) E.val := E1 . val + T.val E.val := T.val T.val := T1 . val * F.val T.val := F.val F.val := E.val F.val := digit.lexval
设输入串为 3 * 5 + 4 。
序号
1 2 3 4 5 6 7
产生式
L→ E n E → E1 + T E→T T → T1 * F T→F F → (E) F → digit
语义规则
Print(E.val) E.val := E1 . val + T.val E.val := T.val T.val := T1 . val * F.val T.val := F.val F.val := E.val F.val := digit.lexval
河北经贸大学信息技术学院
16
序 号 1 2 3 4 5 6 7
产生式 L→ E n E → E1 + T E→T T → T1 * F T→F F → (E) F → digit
语义规则 Print(E.val) E.val := E1 . val + T.val E.val := T.val T.val := T1 . val * F.val T.val := F.val F.val := E.val F.val := digit.lexval
例:
设有文法 L→ E n E→E+T E→T T→T*F T→F F → (E) F → digit 设输入串为 3 * 5 + 4 。 设输入串为 digit * digit + digit。
河北经贸大学信息技术学院
2
L→E n E→E+T E→T T→T*F
L E E T + T F n
T→F F → (E) F → digit
输入串为 real id1 , id2 , id3
河北经贸大学信息技术学院
19
D T L
种别 编码 属性
real real
_ 1
L
,
id 2
id
3
id
,
id , id
_
2 _ 3
L
,
1
id
序号 产生式 语义规则
id 在符号表中的 入口地址
符号表
变量名 id1 id2 id3 相关信息 序号 1 2 3
符号名 L 属性1 属性2 属性3
值1
值2
值3
河北经贸大学信息技术学院
7
2、可以对属性值进行计算、修改和传递。这些过程称为语义处 理过程。 二、属性的分类 综合属性 —— 需自下而上传递信息时用。 继承属性 —— 需自上而下传递信息时用。
继承属性
符号名 A
综合属性
终结符需要继承属性吗?
河北经贸大学信息技术学院
8
三、语义规则 (1)语义规则的形式 在一个属性文法中,每一个产生式A → α都有一套与之关 联的语义规则,形式为: b := f( c1 , c2 , . . . , ck ) 其中,
这两种情况下,我 们说属性 b 依赖于属性 c1 , c2 , . . . , ck 。
● f 是一个函数,
● 当 b 是 A 的一个综合属性时 c1 , c2 , . . . , ck 是产生式右部文 法符号的属性。
语义规则
Print(E.val) E.val := E1 . val + T.val E.val := T.val T.val := T1 . val * F.val T.val := F.val F.val := E.val F.val := digit.lexval
说明: ② 每当一个产生式被使用时,立即执行语义规则所规定的动 作。
① 执行7 ② 执行5 ③ 执行7 ④ 执行4 ⑤ 执行3
F0.val := 3 T0.val := F0.val
F1.val := 5 T1.val := T0 . val * F1.val
E0.val := T1.val
这是一个操作序列。它恰 与符号串 3 * 5 + 4 n 相对应。
⑥ 执行7 ⑦ 执行5
河北经贸大学信息技术学院
注意: 信息传递的方向与 前例不同。
real
D real L
real L id
L
,
id
id
,
6
◆ 需要解决的问题: 信息如何传递?何时传递?计算属性值、填写符号表等操 作如何完成?何时完成?
实际上这是本章所要讨论的核心问题。
一、文法符号的属性及含义 1、 属性文法为每一个符号(包括终结符和非终结符)配备 若干个属性。这些属性的值描述了符号的数值、类型、相关操 作(代码序列)、其它应填入符号表的内容等信息。例如:
10
河北经贸大学信息技术学院
例:
A {
考虑非终结符 A , B , C : B
{ 综合属性 c ;
C
{ 继承属性 d ;
继承属性 a ;
综合属性 b ; } 设产生式
}
}
A→BC ,
语义规则为 C.d = B.c + 1 , A.b = A.a + B.c A.a 是左部的继承属性, B.c 是右部的综合属性,它们的值 要靠其它产生式的计算规则给出。
1 2 3 4 6
D→TL T → int T → real L → L1 , id L → id
L.in := T.type T.type := int T.type := real L1.in := L.in addtype(id.entry , L.in) addtype(id.entry , L.in)
第六章 属性文法 和语法制导翻译
形式语言中的符号没有语义,而无语义的语言无 法使用。所以,本章讨论如何使形式语言具有语义。
河北经贸大学信息技术学院
1
6.1 属性文法
属性文法是在上下文无关文法基础上建立的带有语义规则的文法。属性 文法认为,每一个文法符号(包括终结符和非终结符)实际上都具有若干属 性,这些属性的值及其操作与上下文有关,由此构成了文法符号在不同上下 文中的语义。
河北经贸大学信息技术学院
11wk.baidu.com
例:
考虑一个简单计算器的属性文法:(本例旨在说明综合属性的用法)
序号
1 2 3 4 5 6 7
产生式
L→ E n E → E1 + T E→T T → T1 * F T→F F → (E) F → digit
语义规则
Print(E.val) E.val := E1 . val + T.val E.val := T.val T.val := T1 . val * F.val T.val := F.val F.val := E.val F.val := digit.lexval
河北经贸大学信息技术学院
13
例:
考虑一个简单计算器的属性文法:
序号
1 2 3 4 5 6 7
产生式
L→ E n E → E1 + T E→T T → T1 * F T→F F → (E) F → digit
语义规则
Print(E.val) E.val := E1 . val + T.val E.val := T.val T.val := T1 . val * F.val T.val := F.val F.val := E.val F.val := digit.lexval
4 n
单 编码 词 表 属性
digit
1
_
河北经贸大学信息技术学院
2
_
3
_
17
序号 1 2 3 4 5 6 7
产生式 L→ E n E → E1 + T E→T T → T1 * F T→F F → (E) F → digit
语义规则 Print(E.val) E.val := E1 . val + T.val E.val := T.val T.val := T1 . val * F.val T.val := F.val F.val := E.val F.val := digit.lexval
相关文档
最新文档