语法制导翻译
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分析树各结点属性的计算可以自底向上地完成。
编译原理
11
8+5*2 n的注释分析树 (annotated parse tree)
E.val = 8
L E.val = 18
+
n T.val = 10
T.val = 8
T.val = 5
*wk.baidu.com
F.val = 2
F.val = 8
F.val = 5
digit.lexval = 2
2
介绍一种形式化的语义描述方法:语法制导的翻译, 包括两种具体形式
▪ 语法制导定义(Syntax-Directed Definitions, SDD): 定义翻译所必须的语义属性和语义规则,一般 不涉及计算顺序。
▪ 翻译模式(translation schemes): 给出语义规则 的计算顺序。
编译原理
5
5.1.1综合属性和继承属性
综合属性:在分析树结点N上的非终结符A的综合 属性是由N上的产生式所关联的语义规则来定义的。 A是产生式的头。结点N上的综合属性只能通过N的 子结点的属性值或结点N本身的属性值计算得到。
继承属性:在分析树结点N上的非终结符B的继承 属性是由N的父结点上的产生式所关联的语义规则 来定义的。 B出现在产生式的体中。结点N上的继 承属性只能通过N的父结点的属性值、结点N本身 的属性值或N的兄弟结点的属性值计算得到。
例:图5-7的一个拓扑排序 1,2,3,4,5,6,7,8,9
或1,3,5,2,4,6,7,8,9
编译原理
20
循环依赖Circular dependency
产生式 AB
语义规则 A.s := B.i B.i := A.s + 1
A A.s
B B.i
编译原理
21
属性计算次序
构造输入的分析树, 构造属性依赖图, 对结点进行拓扑排序, 按拓扑排序的次序计算属性。
1. b是A的综合属性,c1, c2 , …, ck是产生式右部文 法符号的属性。
2. b是产生式右部某个文法符号的继承属性,且c1 , c2 , …, ck也是该产生式文法符号的属性。
称属性b依赖于属性c1, c2 , …, ck。
编译原理
8
例5.1 简单台式计算器的语法制导定义
产生式 LEn E E1 + T ET T T1 * F TF F (E) F digit
F.val := digit.lexval
编译原理
13
图5-4
T.val = 15
F.val = 3
T′.inh = 3
.syn =15
digit.lexval =3
*
T1′.inh = 15
F.val = 5
.syn =15
digit.lexval = 5
编译原理
14
继承属性
一个结点的继承属性值由该结点的父结点和(或) 兄弟结点的属性决定。
在语法制导定义中,终结符号只有综合属性,它们 的值由词法分析程序提供;digit.lexval
假设开始符号没有继承属性。
编译原理
10
5.1.2 对SDD求值
S属性定义:仅仅使用综合属性的语法制导定义称 为S属性定义。
例5.1中的S属性定义详细说明了一台计算器读入包 含数字,括号,+和*运算符的算术表达式,随后再 读入一个换行字符n,然后打印出表达式值的过程 。
介绍语法制导翻译的实现方法。
编译原理
3
语法制导翻译的一般过程
输入符号串 分析树 依赖图 语义规则的计算顺序
一个句子的翻译过程可以与语法分析过程并行。
编译原理
4
5.1 语法制导定义
语法制导定义是对CFG的推广,每个文法符号都有 一个相关的属性集。
属性:语义信息。一个文法符号通常用一个或若干 个属性来描述它的语义信息。典型例子: ▪ 变量的数据类型 ▪ 表达式的值 ▪ 变量的存储位置 ▪ 程序的目标代码
语义规则 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
编译原理
9
综合属性: E.val, T.val, F.val, digit.lexval
digit.lexval = 8 digit.lexval = 5
编译原理
12
例5.3
产生式
TFT′
T′ * F T1′
T′
F digit
语义规则
T′.inh = F.val T.val = T′.syn T1′.inh = T′.inh F.val T′.syn = T1′.syn T′.syn = T′.inh
编译原理
22
5.2.3 S属性定义
如果一个SDD的每个属性都是综合属性,则它是S属性。可 以按照分析树的自底向上顺序来计算各属性值。
编译原理
18
图5-7
T val 9
F val 3
inh 5 T′ syn 8
digit lexval 1 *
F val 4
inh 6 T1′ syn 7
digit lexval 2
编译原理
19
5.2.2 属性求值的顺序
拓扑排序:结点的一种排序,若mimj是从mi到mj 的边,那么在此排序中mi先于mj。 ▪ 有向图变成线形排序
编译原理
15
5.2 SDD的求值顺序
编译原理
16
5.2.1 属性依赖图
依赖图主要用于 ▪ 确定属性的计算顺序; ▪ 设计语义规则。
编译原理
17
例5.4
产生式 E E1+E2
语义规则 E.val := E1.val + E2.val E val
E1val +
E2 val
E.val是从E1.val和E2.val综合得出
第五章 语法制导翻译
1
在文法中,文法符号通常都有明确的意义,文法符 号之间也有确定的语义关系。
用属性描述语义信息,用语义规则描述属性之间的 关系,将语义规则与语法规则相结合。
语法制导翻译(Syntax-Directed Translations): 在语法分析的过程中计算语义属性值。
编译原理
编译原理
6
语义规则:描述产生式中各文法符号的属性之间的 依赖关系。通常用函数或程序语句的形式表示。
依赖图:表示文法符号属性之间依赖关系的有向图。 注释分析树:每个结点都带有属性值的分析树。
编译原理
7
每个产生式A有一组形如b := f(c1, c2, …, ck )的
语义规则,其中f 是函数,并且满足下面两种情形 之一:
编译原理
11
8+5*2 n的注释分析树 (annotated parse tree)
E.val = 8
L E.val = 18
+
n T.val = 10
T.val = 8
T.val = 5
*wk.baidu.com
F.val = 2
F.val = 8
F.val = 5
digit.lexval = 2
2
介绍一种形式化的语义描述方法:语法制导的翻译, 包括两种具体形式
▪ 语法制导定义(Syntax-Directed Definitions, SDD): 定义翻译所必须的语义属性和语义规则,一般 不涉及计算顺序。
▪ 翻译模式(translation schemes): 给出语义规则 的计算顺序。
编译原理
5
5.1.1综合属性和继承属性
综合属性:在分析树结点N上的非终结符A的综合 属性是由N上的产生式所关联的语义规则来定义的。 A是产生式的头。结点N上的综合属性只能通过N的 子结点的属性值或结点N本身的属性值计算得到。
继承属性:在分析树结点N上的非终结符B的继承 属性是由N的父结点上的产生式所关联的语义规则 来定义的。 B出现在产生式的体中。结点N上的继 承属性只能通过N的父结点的属性值、结点N本身 的属性值或N的兄弟结点的属性值计算得到。
例:图5-7的一个拓扑排序 1,2,3,4,5,6,7,8,9
或1,3,5,2,4,6,7,8,9
编译原理
20
循环依赖Circular dependency
产生式 AB
语义规则 A.s := B.i B.i := A.s + 1
A A.s
B B.i
编译原理
21
属性计算次序
构造输入的分析树, 构造属性依赖图, 对结点进行拓扑排序, 按拓扑排序的次序计算属性。
1. b是A的综合属性,c1, c2 , …, ck是产生式右部文 法符号的属性。
2. b是产生式右部某个文法符号的继承属性,且c1 , c2 , …, ck也是该产生式文法符号的属性。
称属性b依赖于属性c1, c2 , …, ck。
编译原理
8
例5.1 简单台式计算器的语法制导定义
产生式 LEn E E1 + T ET T T1 * F TF F (E) F digit
F.val := digit.lexval
编译原理
13
图5-4
T.val = 15
F.val = 3
T′.inh = 3
.syn =15
digit.lexval =3
*
T1′.inh = 15
F.val = 5
.syn =15
digit.lexval = 5
编译原理
14
继承属性
一个结点的继承属性值由该结点的父结点和(或) 兄弟结点的属性决定。
在语法制导定义中,终结符号只有综合属性,它们 的值由词法分析程序提供;digit.lexval
假设开始符号没有继承属性。
编译原理
10
5.1.2 对SDD求值
S属性定义:仅仅使用综合属性的语法制导定义称 为S属性定义。
例5.1中的S属性定义详细说明了一台计算器读入包 含数字,括号,+和*运算符的算术表达式,随后再 读入一个换行字符n,然后打印出表达式值的过程 。
介绍语法制导翻译的实现方法。
编译原理
3
语法制导翻译的一般过程
输入符号串 分析树 依赖图 语义规则的计算顺序
一个句子的翻译过程可以与语法分析过程并行。
编译原理
4
5.1 语法制导定义
语法制导定义是对CFG的推广,每个文法符号都有 一个相关的属性集。
属性:语义信息。一个文法符号通常用一个或若干 个属性来描述它的语义信息。典型例子: ▪ 变量的数据类型 ▪ 表达式的值 ▪ 变量的存储位置 ▪ 程序的目标代码
语义规则 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
编译原理
9
综合属性: E.val, T.val, F.val, digit.lexval
digit.lexval = 8 digit.lexval = 5
编译原理
12
例5.3
产生式
TFT′
T′ * F T1′
T′
F digit
语义规则
T′.inh = F.val T.val = T′.syn T1′.inh = T′.inh F.val T′.syn = T1′.syn T′.syn = T′.inh
编译原理
22
5.2.3 S属性定义
如果一个SDD的每个属性都是综合属性,则它是S属性。可 以按照分析树的自底向上顺序来计算各属性值。
编译原理
18
图5-7
T val 9
F val 3
inh 5 T′ syn 8
digit lexval 1 *
F val 4
inh 6 T1′ syn 7
digit lexval 2
编译原理
19
5.2.2 属性求值的顺序
拓扑排序:结点的一种排序,若mimj是从mi到mj 的边,那么在此排序中mi先于mj。 ▪ 有向图变成线形排序
编译原理
15
5.2 SDD的求值顺序
编译原理
16
5.2.1 属性依赖图
依赖图主要用于 ▪ 确定属性的计算顺序; ▪ 设计语义规则。
编译原理
17
例5.4
产生式 E E1+E2
语义规则 E.val := E1.val + E2.val E val
E1val +
E2 val
E.val是从E1.val和E2.val综合得出
第五章 语法制导翻译
1
在文法中,文法符号通常都有明确的意义,文法符 号之间也有确定的语义关系。
用属性描述语义信息,用语义规则描述属性之间的 关系,将语义规则与语法规则相结合。
语法制导翻译(Syntax-Directed Translations): 在语法分析的过程中计算语义属性值。
编译原理
编译原理
6
语义规则:描述产生式中各文法符号的属性之间的 依赖关系。通常用函数或程序语句的形式表示。
依赖图:表示文法符号属性之间依赖关系的有向图。 注释分析树:每个结点都带有属性值的分析树。
编译原理
7
每个产生式A有一组形如b := f(c1, c2, …, ck )的
语义规则,其中f 是函数,并且满足下面两种情形 之一: