第6章 属性文法.

合集下载

L-属性文法和自顶向下翻译(1)

L-属性文法和自顶向下翻译(1)
T→num {print(num.val)}
8
翻译模式示例:把带加号和减号的中缀表
达式翻译成相应的后缀表达式
E→TR
R→addop T {print(addop.lexeme)} R1 | T→num {print(num.val)}
E
例:9-5+2
T
R
9 {print(‘9’)} -
T {print(‘-’)} R
15
产生式 语义规则
S→B
B.ps :=10
翻译模式
B→B1B2
S.ht :=B.ht B1.ps :=B.ps
B2.ps :=B.ps
S → {B.ps:=10} B {S.ht:=B.ht}
B.ht := max(B1.ht, B2.ht)
B→B1 sub B2 B1.ps :=B.ps B2.ps :=shrink(B.ps)
编译原理
第六章 属性文法和语法制导翻译
1
第六章 属性文法和语法制导翻译
属性文法 基于属性文法的处理方法 S-属性文法的自下而上计算 L-属性文法和自顶向下翻译
2
第六章 属性文法和语法制导翻译
属性文法 基于属性文法的处理方法 S-属性文法的自下而上计算 L-属性文法和自顶向下翻译
3
3. 产生式左边非终结符的综合属性只有在它所引用 的所有属性都计算出来以后才能计算。计算这种 属性的动作通常可放在产生式右端的末尾
S → A1A2 A→a
{A1.in:=1; A2.in:=2} {print(A.in)}
12
排版软件 TeX、LaTeX
The quadratic formula is b b2 4ac 2a

编译原理6-1-属性文法

编译原理6-1-属性文法

real id1, id2, id3 的带注释的语法树 综合属性 D T .type = real real
D → TL T→ int →
L.in := T.type T. type := integer
T→ real T. type := real → L→ L1, id L1.in := L.in; → addtype (id.entry,L.in ) L→ id addtype (id.entry,L.in ) →
注意
只有综合属性, 终结符 只有综合属性,它们由词法分析器提供 非终结符 既可有综合属性也可有继承属性
产生式A→ 有规则 例: 产生式 →BC有规则
继承属性 A B C
C.d := B.c+1 + A.b := A.a+B.c +
综合属性
S-属性文法
仅仅使用综合属性的属性文法称 属性文法 仅仅使用综合属性的属性文法称 S-属性文法 综合属性 在语法树中,一个结点的综合属性的值由其 在语法树中,一个结点的综合属性的值由其 综合属性 子结点的属性值确定 的属性值确定。 子结点的属性值确定。 通常使用自底向上的方法在每一个结点处使用 通常使用自底向上的方法在每一个结点处使用 自底向上 语义规则计算综合属性的值。 语义规则计算综合属性的值。
(c)
F
3+4*5
3+4 * 5
3 +4*5
345* +
345
G:
N→S.S → S →SB S →B B →0 B →1
补充例 3 给文法配备语义规则, 给文法配备语义规则 完成二进制到十进制的转换 输入- 输入- 11.01 输出- 输出- 3.25
11.01= 1*21+1*21+0*2-1+1*2-2

编译原理第六章:属性文法和语法制导翻译

编译原理第六章:属性文法和语法制导翻译
生综性仅合式依属A→赖性x于,1x:2或,…者x是n,xj其(1≤每j≤个n)语的义一规个则继中承的属每性个且属这性个或继者承是属
(1)产生式xj的左边符号x1,x2,…xj-1的属性; (2)A的继承属性 L-属性文法最大特点是产生式右部符号的继承属性不依赖于
其右部符号的任何属性。
注:S-属性文法一定是L-属性文法 • S-属性文法适合于一遍扫描的自下而上分析 • L-属性文法可用于一遍扫描的自上而下分析
3.翻译模式:给出了使用语义规则进行计算的次序,这样可 把某些实现细节表现出来,在翻译模式中,和文法符号 相关属性和语义规则(语义动作),用花括号{ }括起来, 插入到产生式右部的合适位置上。
复习题
名词术语: 属性文法、继承属性、综合属性 语法制导翻译、抽象语法树、翻译模式 S-属性文法、L-属性文法
第六章 属性文法和语法制导翻译
6.1 属性文法 6.2 基于属性文法的处理方法 6.3 S-属性文法的自下而上计算 6.4 L-属性文法和自顶向下翻译 6.5 自下而上计算继承属性
6.1 属性文法(属性翻译文法)
一.属性文法 1.属性文法定义
(上下文无关文法+属性/属性符号定义+属性规则定义) 即: 在上下文无关文法的基础上,为每个文法符号(终结 符或非终结符)配备若干相关的值(称为属性)。
表 6.2(P139) 带继承属性 L.in 的属性文法
产生式
语义规则
D→TL
L.in:=T.type
T→int
T.type:=integer
T→real
T.type:=real
L→L1,id
L1.in:=L.in
addtype(id.type,L.in)

编译原理课件06属性文法和语法制导翻译

编译原理课件06属性文法和语法制导翻译
编译原理课件06属性文法 和语法制导翻译
属性文法和语法制导翻译是编译原理领域的两个核心概念。本课程将深入探 讨这两个主题,让大家全面了解编译原理的精髓。
属性文法:理论基础
属性文法定义
与上下文无关文法的区别
属性文法定义了语法结构的属性, 包括终结符和非终结符上的属性 和符号间的依赖。
上下文无关文法的语法结构是确 定的,而属性文法的语法结构中 包含了属性的信息。
产生式规则
属性文法的产生式规则由形式化 的产生式和附加的语义规则组成。
语法制导翻译:应用实例
1 基本概念
语法制导翻译将属性值与语法树相结合,用 于将源语言转换为目标语言。
2 方法
语法制导翻译可以通过S属性翻译计算自底向 上地求解,或手动注入Semantic动作。
3 过程
语法制导翻译的过程包括生成属性语法树, 计算语法树的属性,以及将属性与具体操作 相结合。
4 应用实例
语法制导翻译可用于编译器和解释器中,例 如C语言和Java编译器。
语法制导翻译:方法与实践
1
构建属性语法树
将上下文无关文法转化为属性文法,并构建出属性语法树。下而上或自上而下的语法属性计算。
3
执行动作
根据语法属性的计算结果,执行对应的语义动作。
属性文法和语法制导翻译的应用举例
创造思维
转型准备
编译原理培养了我们的创造思维, 让我们能够从编译器底层的实现 中提升自己的能力。
编译原理培养了我们的技术能力 和团队协作精神,为我们的未来 职业道路打下了基础。
编译器
编译器使用语法制导翻译将高级语言转换为机 器代码。
代码生成
属性文法可以用于指令选择与寄存器分配,优 化生成的目标代码。

编译原理习题课(3)

编译原理习题课(3)

四元式序列: (1) + (2) (3) + (4) * (5) + (6) + (7) -
a b T1 T1 - T2 c d T3 T2 T3 T4 a b T5 T5 c T6 T4 T6 T7
23
赋值语句的翻译
简单算术表达式及赋值语句 数组元素的引用 产生有关类型转换的指令
24
P218-4. 按7.3节所说的办法,写出下面赋值句
L→En print(E.val)
E→E1+T E.val := E1.val+T.val
E→T
E.val :=T.val
T→T1*F T.val :=T1.val* F.val
T→F
T.val :=F.val
F→ (E) F.val :=E.val
F→digit F.val :=digit.lexval
5
digit.lexval=4
E → T { R.i:=T.val } R { E.val:=R.s }
P164-2. 对表达式((a)+(b))R:→ +
(的1)抽按象照语表法6树.4所;示的属性文R 法→ TR构- 1{ {造RR1..该i:s=:=R表.Ri+1达T.s.v式}al }
(式2)的按抽照象图语6法.17树所。示的翻译R模→式TR1,{{ RR构1.s.i::=造=R{RR.该.ii-.}sT表:.=vaR达l }1.s }
综合属性:“自下而上”传递信息 继承属性性文法的处理方法
依赖图 树遍历 一遍扫描
L-属性文法适合于一遍扫描的自上而下分析 S-属性文法适合于一遍扫描的自下而上分析
4
L
P164–1按照表6.1所

语法制导翻译及属性文法-编译原理-06-(一)讲诉

语法制导翻译及属性文法-编译原理-06-(一)讲诉

5. S-属性定义(S-属性文法)
S-属性定义:仅包含综合属性的属性
文法(语法制导定义)
S-attributed S-attributed
Definition Grammar
如:算术表达式求值的属性文法
2018/11/19 25
非S-属性定义
D→T L
T→int
L.in := T.type
要解决的问题: 1. 纪录标识符的类型 2. 类型信息传递 方法:用T.type记录类 型信息,并传给L.in
14
例6-2 说明语句的属性文法
D→TL
T → int T → real L → L1,id L → id
L.in := T.type
T.type := ‘integer’ T.type := ‘real’ L1.in := L.in addtype( id.entry, L.in ) addtype( id.entry, L.in )
2018/11/19
F.val := E.val
F.val := digit.lexval lexval 是单词 digit 的属性
13
例6-2 说明语句的属性文法
说明语句的文法
D→TL T → int T → real L → L1,id L → id
2018/11/19
real operand, length, sum int add, sub, mult
是一种接近形式化的语义描述方法 长于描述静态语义、短于描述动态语义 每个语法符号有相应的属性符号 每个产生式有相应计算属性的规则
属性变量:=属性表达式
2018/11/19 8
属性文法举例
产生式 E → E1 + E2 属性(计算)规则/语义规则 E.val := E1.val + E2.val

第6章 属性文法

第6章   属性文法

1
引言
• 后面要讨论的中间代码生成,是指把单词符号串形式的源程 序转换为另一种等价的便于代码优化处理和目标代码生成的 表示方法。 • 目前常见的中间语言有逆波兰表示、三元式、四元式等等。 • 遗憾的是,中间代码生成与语言的语义密切相关,而语义的 形式化描述是一件非常困难的事情; • 存在一种称为语法制导翻译的模式,这种模式实际上是对上 下文无关文法的一种扩充。 • 方法:对文法中的每个产生式都附加一个语义动作或语义子程 序,在语法分析过程中,每当需要使用一个产生式进行推导或 归约,语法分析程序除执行相应的语法分析动作外,还要执 行相应的语义动作或调用相应的语义子程序。
且c1,c2,…,ck是A或α中任何文法符号的属性.
⇒属性b依赖于属性c1,c2,…,ck
12
6.1 属性文法
2.VT—VN的属性
(1) VT — 只有综合属性,由词法分析器提供.
(2) VN — 既可有综合属性也可有继承属性;
开始符号S的所有继承属性作为属性计算
前的初始值.
13
出现在产生式左边的继承属性和出现在产生式右边的 综合属性不由所给定的产生式的属性计算规则进行 计算,它们由其它产生式的属性规则计算或者由属 性计算器的参数提供。 AX1 X2 …Xn A的综合属性S(A)计算公式 S(A):=f(I(X1),…,I(Xn)) Xj的继承属性T(Xj)计算公式 T(Xj):=f(I(A),... I(Xn)) 1)非终结符既可有综合属性也可有继承属性 2)终结符只有综合属性,它们由词法程序提供.
一个依赖图的任何拓扑排序都给出一个语法树
中结点的语义规则计算的有效顺序。
注:在拓扑排序中,在一个结点上,语义规则
b:=f(c1,c2,…,ck)中的属性c1,c2,…,ck

编译原理第六章属性文法和语法制导翻译

编译原理第六章属性文法和语法制导翻译

第六章 属性文法和语法制导翻译要紧内容:[1] 法制导翻译的大体思想; [2] 属性文法的大体概念; [3] 基于属性文法的处置方式;[4] 在自上而下分析和自下而上分析中的属性计算。

大体要求:[1] 明白得语法制导翻译和属性文法的大体思想和方式, [2] 把握属性的计算方式。

教学要点:本章中,咱们将第一介绍属性文法的大体概念,然后介绍基于属性文法的处置方式,讨论如安在自上而下分析和自下而上分析中实现属性的计算。

讲义摘要:6.1 属性文法一、语义分析的任务一、静态语义分析或静态审查。

例如,类型检查、操纵流检查(操纵流语句必需使操纵转移到合法的地址 )、维数检查、越界检查、名字的作用域分析 等。

二、动态语义处置。

若是静态语义正确,语义处置那么要执行真正的翻译。

例如,变量的存储分派;表达式的求值;语句的翻译(中间代码的生成)。

3、总目标:生成等价的中间代码二、属性文法 一、属性所谓属性,其涉及的概念比较普遍,经常使用以描述事物或人的特点、性质,品质等等。

比如,谈到一个 物体,能够用“颜色”描述它,谈起某人,能够利用“有幽默感“来形容他。

对编译程序利用的语法树的结点,能够用"类型"、"值"或"存储位置"来描述它。

二、属性文法(也称属性翻译文法)属性文法是Knuth 在1968年第一提出的。

它是在上下文无关文法的基础上,为每一个文法符号(终结符或非终结符)配备假设干相关的“值”(称为属性)。

这些属性代表与文法符号相关信息,例如它的类型、值、代码序列、符号表内容等等。

属性与变量一样,能够进行计算和传递。

属性加工的进程即是语义处置的进程。

关于文法的每一个产生式都配备了一组属性的计算规那么,称为语义规那么。

语义规那么所描述的工作能够包括属性计算、静态语义检查、符号表操作、代码生成等等。

3、属性文法的形式化概念形式上讲,一个属性文法是一个三元组:A=(G,V,F),其中 G:是一个上下文无关文法。

属性文法.ppt

属性文法.ppt
第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 属性文法

第6章 属性文法和语法制导翻译

第6章 属性文法和语法制导翻译
D
T T.type=real real L L.in=real L.in=real , L L.in=real , L id1 id2
产生式 D→TL T→int T→real 语义规则 L.in:=T.type T.type:=integer T.type:=real addtype(id.entry,L.in) addtype(id.entry,L.in)
产生式 N→S1.S S→S1B S→B B→0 B→1 语义规则 {N.v=S1.v+S.v*2-S.L} {S.v=S1.v*2+B.v,S.L=S1.L+1 } {S.v=B.v,S.L=1} {B.v=0} {B.v=1}
S
S B
.
S
S
B
B
1
1
B
0
1
23
1 属性文法
举例3:文法G(N):N→S.S S→SB S→B 1. 方案1:计算综合属性S.L N→S1.S N {N.v=S1.v+S.v*2-S.L} S→S1B S2 . {S.v=S1.v*2+B.v, S.L=S1.L+1} S1 B S→B {S.v=B.v, S.L=1} B 1 B→0{B.v=0} B→1{B.v=1} 1 B→0 B→1
产生式 N→S1.S S→S1B S→B B→0 B→1 语义规则 {N.v=S1.v+S.v,S1.f=1,S.f=2-S.L} {S.L=S1.L+1,S1.f=S.f*2,B.f=S.f,S.v=S1.v+B.v} {S.L=1,B.f=S.f,S.v=B.v} {B.v=0} {B.v=B.f}
第6 章 属性文法和语法制导翻译
语义分析 静态语义分析 类型检查、控制流检查、一致性检查 名字的作用域分析 动态语义分析 栈溢出 数组越界

编译原理6-1-属性文法

编译原理6-1-属性文法
属性:类型、值、代码序列、符号表内容…
表6.1 一个简单台式计算器的属性文法
属性的计算
产 生 式 换行符 语 义 规 则
规则
LEn
print (E.val) L的虚属性
E E1 + T
E.val := E1 .val + T.val
ET
E.val := T.val
T T1 * F
T.val := T1.val * F.val
real id1, id2, id3 的带注释的语法树
综合属性 D
D TL L.in := T.type T int T. type := integer T real T. type := real L L1, id L1.in := L.in;
addtype (id.entry,L.in ) L id addtype (id.entry,L.in )
第六章 属性文法和语法制导翻译
6.1 属性文法 6.2 基于属性文法的处理方法 6.3 S-属性文法的自下而上计算 6.4 L-属性文法和自顶向下翻译 6.5 自下而上计算继承属性
语义分析
静态语义分析 类型检查、控制流检查 、一致性检查 名字的作用域分析
动态语义分析 栈溢出 数组越界 a[i]
综合属性
A
B
C
S-属性文法
仅仅使用综合属性的属性文法称 S-属性文法 在语法树中,一个结点的综合属性的值由其
子结点的属性值确定。 通常使用自底向上的方法在每一个结点处使用
语义规则计算综合属性的值。
☆ 表6.1 一个简单台式计算器的属性文法
带注释的语法树
(结点带有语义信息 )
8+5*2n

第6章 属性文法及语法制导翻译 (编译原理 陈火旺)讲诉

第6章  属性文法及语法制导翻译 (编译原理 陈火旺)讲诉
7

(1) 终结符只有综合属性,它由词法分析器提供

属性文法的说明(1)
P136
例如 digit.lexval 表示单词符号“数”的词法值 id.entry 表示单词符号“标识符”的符号表入口


(2) 非终结符既可以有综合属性也可以有继承 属性,在属性文法的语义规则中计算 (3) 关于属性计算的规定
A
A X1X2…Xn b:=f(c1,c2,…,ck)
A.b
带注释的 语法树
14
X1 X2 … Xn
X1.c1 X2 .c2 … Xn . ck
两种属性:继承属性
• 继承属性用于“自上而下”传递信息。 • 继承属性:在语法树中,一个结点的继承属 性由此结点的父结点和(或)兄结点的某些属 性确定。 • 可以用继承属性来表示程序语言结构中的上 下文依赖关系。 • 继承属性的计算可以结合自上而下的语法分 析进行。 A. c
A X1 … X … Xn
A X1X2…Xn b:=f(c1,c2,…,ck)
k
X1.c1 … X.b
… Xn
17
6.2 基于属性文法的处理方法 • 属性文法: 产生式 语义规则 .
A α b:=f(c1,c2,…,ck) • 语义规则的计算可以执行任何翻译动作。对输入串 的翻译也就是根据语义规则进行计算得出结果。 • 属性文法是比较抽象的翻译说明,隐藏了一些实现 细节, 主要是无须指明翻译时语义规则的计算次序。 • 本节讨论语义规则的计算方法,指明属性文法中语 义规则的计算次序,从而把语义规则改造为计算属 性的语义程序,把静态的语义规则改写为可动态执 行的语义动作 --- 语法制导翻译方法。
4
6.1 属性文法
• 属性文法, 也称属性翻译文法或语法制导定义, 是Knuth在1968年首先提出来的。 • 属性:在上下文无关文法的基础上为每个文法 符号X(终结符或非终结符)配备若干个相关的 “值”---这些“值”就称为文法符号X的属性。 • 属性值的设置和语法结构的语义以及翻译程序 的需要有关。 • 属性代表与文法符号相关语义信息,如类型、 值、代码序列、符号表内容等
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

后 端 处 理
代码生成
汇编代码
第六章
属性文法和语法制导翻译
6.1 属性文法 6.2 基于属性文法的处理方法
6.3 S—属性文法的自下而上计算
6.4 L—属性文法和自顶向下翻译
6.5 自下而上计算继承属性
7
6.1 属性文法一、基本源自念1.属性广义:用以描述事物或人的特征、性质、品质等等。
狭义:代表与文法符号相关的信息,其信息值即为
引言(续)
• 这种模式既把语法分析与语义处理分开,又令其平行地进 行,让其在同一遍扫描中同时完成语法分析和语义处理两 项工作。 • 由此可见,抽象文法符号的具体语义信息,是在与语法分 析同步的语义处理过程中获取和加工的。 • 文法符号X的语义信息我们称之为语义属性或简称为属性 (Attributes)。 • 我们用形如X.ATTR的记号来表示文法符号X的相关语义属 性。 • 如果一个文法符号X在一产生式中多次出现,为了在语义 上能够对其进行区分,可添加不同的上标。
a和一个综合属性b,B有综合属性c,C有继承属
性d。
产生式ABC可能有规则: C.d:=B.c+1 A.b:=A.a+B.c
A.a—左部继承属性 A.b—左部综合属性 B.c—右部综合属性 C.d—右部继承属性
算规则,称为语义规则。
3. 属性文法
在上下文无关文法的基础上,为每个文法符
号(终结符或非终结符)引进一组属性,且让该文
法中的重写规则附加上语义规则时,称该上下文无
关文法为属性文法。
注:语法制导翻译是指在语法分析的过程中,完成附加在所使 用的产生式上的语义规则所描述的动作。 10
属性文法
属性文法(attribute grammar)是一个三元组: A=(G,V,F),其中 G:是一个上下文无关文法 V:有穷的属性集,每个属性与文法的一个终结符或非 终结符相连,这些属性代表与文法符号相关信息, 如它的类型、值、代码序列、符号表内容等等 . 属性与变量一样,可以进行计算和传递。属性加 工的过程即是语义处理的过程。 F:关于属性的属性断言或一组属性的计算规则(称为 语义规则) . 断言或语义规则与一个产生式相联, 引用该产生式左端或右端的终结符或非终结符相 联的属性.
6.1 属性文法
二、基本规则
1. 语义规则的形式: 产生式Aα的语义规则的形式为b:=f(c1,c2,…,ck)
其中:(1) f是一个函数;通常以表达式的形式出现
b有 两种 可能
(2) 或者b—A的综合属性,且c1,c2,…,ck是α中文法 符号的属性;
(3) 或者b—α中某个文法符号的继承属性,
文法符号及其语义属性
• 例如,文法G[E]: 产生式 语义子程序 E→E(1)+T {E.Val=E(1).val+T.val;} E→T {E.Val=T.Val;} T→digit {T.Val=digit;} • 为了能在语法分析过程中平行地进行 语义处理,可在语法分析栈旁边并行 地设置一个语义信息栈
语法分 析栈 T + E … #
语义分 析栈 T.Val ‘+’

语义处理(语义分析和中间代码生成)
在编译中的逻辑阶段
源语言程序
词法分析 前 端 处 理
语法分析
语义分析 中间代码生成 中间代码 语 义 处 理
后 端 处 理
代码生成
汇编代码
语义处理
源语言程序
词法分析 前 端 处 理
语法分析
语义分析 语 义 处 理
词法分析与语法分析是编译程序的一部分。
在早期的一些编译程序中,是在语法分析的基础上根 据源程序中各语法成份的语义,直接产生机器语言或汇 编语言形式的目标代码。 现在的编译系统一般都将经过语法分析的源程序先翻 译为某种形式的中间语言代码,然后再将其翻译为目标 代码。 优点:
使编译程序各组成部分功能更单一; 使得编译程序的逻辑结构更为清晰,从而 使编译程序更易于编写与调整;同时 为代码优化和程序的可移植性提供了条件
6.1 属性文法
3.属性的计算/获得
(1) 产生式右边的继承属性
产生式左边的综合属性 (2) 产生式左边的继承属性 产生式右边的综合属性
由该产生式提供的计 算规则计算获得
由其它产生式的属性 规则计算或由属性计 算器的参数提供
15
6.1 属性文法
例6.1:考虑非终结符A,B和C,其中,A有一个继承属性
1
引言
• 后面要讨论的中间代码生成,是指把单词符号串形式的源程 序转换为另一种等价的便于代码优化处理和目标代码生成的 表示方法。 • 目前常见的中间语言有逆波兰表示、三元式、四元式等等。 • 遗憾的是,中间代码生成与语言的语义密切相关,而语义的 形式化描述是一件非常困难的事情; • 存在一种称为语法制导翻译的模式,这种模式实际上是对上 下文无关文法的一种扩充。 • 方法:对文法中的每个产生式都附加一个语义动作或语义子程 序,在语法分析过程中,每当需要使用一个产生式进行推导或 归约,语法分析程序除执行相应的语法分析动作外,还要执 行相应的语义动作或调用相应的语义子程序。
属性值。
例如:其类型、值、代码序列、符号表内容等。
8
6.1 属性文法
注:
(1)属性与变量一样,可以进行计算和传递。
(2)属性加工的过程即是语义处理的过程。 (3)属性 综合属性:用于“自下而上”传递信息。
继承属性: 用于“自上而下”传递信息。
9
6.1 属性文法
2. 语义规则
为文法的每一个产生式配备的计算属性的计
且c1,c2,…,ck是A或α中任何文法符号的属性.
⇒属性b依赖于属性c1,c2,…,ck
12
6.1 属性文法
2.VT—VN的属性
(1) VT — 只有综合属性,由词法分析器提供.
(2) VN — 既可有综合属性也可有继承属性;
开始符号S的所有继承属性作为属性计算
前的初始值.
13
出现在产生式左边的继承属性和出现在产生式右边的 综合属性不由所给定的产生式的属性计算规则进行 计算,它们由其它产生式的属性规则计算或者由属 性计算器的参数提供。 AX1 X2 …Xn A的综合属性S(A)计算公式 S(A):=f(I(X1),…,I(Xn)) Xj的继承属性T(Xj)计算公式 T(Xj):=f(I(A),... I(Xn)) 1)非终结符既可有综合属性也可有继承属性 2)终结符只有综合属性,它们由词法程序提供.
相关文档
最新文档