文法符号及其语义属性
第14讲 属性文法

real ⑥ L ⑨ addtype, in
L1.in :=L.in addtype(id.entry, L.in) ⑧ addtype(id.entry, L.in) in
L ⑩ addtype , id1 ①
entry
id2 ② entry
id3 ③ entry
良定义的属性文法
如果一属性文法不存在属性之间的循环依赖关 系,则称该文法为良定义的
A. C.d:=B.c+1
视频区域
B. A.b:=B.c+C.d
C. B.c := A.a
编译原理
带注释的语法树
带注释的语法树
D
T.type=real
L.in=real
real
L.in=real ,
L.in=real ,
id2
id1
视频区域
id3
带注释的语法树
在语法树中,一个结点的综合属性的值由其子 结点和它本身的属性值确定
产生式
L→En
带注释的语法树
E→E1+T E→T
句子3*5+4n
T→T1*F T→F
L F→ (E)
F→digit
E.val=19
n
语义规则 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
视频区域
以上下文无关文法为基础
为每个文法符号(终结符或非终结符)配备若干相 关的“值”(称为属性),代表与文法符号相关信 息,如类型、值、代码序列、符号表内容等
中国科学技术大学陈意云编译原理全套参考资料chapter4

中国科学技术大学陈意云编译原理全套参考资料chapter4 第四章语法制导的翻译在3.7节用Yacc写的例子中,我们看到一种有用的描述形式:语言结构的属性附加在代表语言结构的文法符号上,这些属性值由附加在文法产生式的语义动作来计算,这些语义动作在归约对应的产生式时进行计算,由此得到结果。
这种描述形式可用来描述编译器的语义分析,因此本章系统地研究这种称之为“语法制导下的语言翻译”的描述方法及其实现。
它的语义动作(有时称为语义规则)的计算可以产生代码、把信息存入符号表、显示出错信息、或完成其它工作。
语义规则的计算结果就是我们所要的记号流的翻译。
本章讨论语义规则和产生式相联系的两种方式:语法制导的定义和翻译方案。
语法制导定义是较抽象的翻译说明,它隐蔽了一些实现细节;而翻译方案陈述了一些实现细节,主要是指明了语义规则的计算次序。
在第五章说明语义检查和第七章描述中间代码生成时,大量使用这两种方法。
本章还讨论语法制导定义和翻译方案的实现方法。
概念上的方法是,首先分析输入的记号串,建立分析树,然后从分析树得到描述结点属性间依赖关系的有向图,从这个依赖图得到语义规则的计算次序,然后进行计算,最终得到翻译的结果。
实际的实现并不需要按上面步骤逐步进行,本章将讨论几种不同限制下的实现方法。
4.1 语法制导的定义语法制导的定义是上下文无关文法的推广,其中每个文法符号都有一个属性集合,它分成两个子集,分别叫做该文法符号的综合属性集合和继承属性集合。
如果我们把分析树上的结点看成是保存对应文法符号的属性的记录,那么属性对应记录的域。
属性可以表示任何东西:串、数、类型、内存单元,或其它想表示的东西。
分析树结点的属性值由该结点所用产生式的语义规则定义。
在语法制导定义中,我们把其中的文法称为基础文法。
本节介绍语法制导定义的形式及其概念上的实现模型。
4.1.1 语法制导定义的形式在语法制导定义中,每个文法符号有一组属性,每个文法产生式A , ,有一组形式为b := f (c, c, …, c )的语义规则,其中f 是函数,b和c, c, …, c 是该产生式的文法符号的12k12k属性,并且:(1) 如果b是A的属性,c , c , …, c 是产生式右部文法符号的属性或A的其它属12k性,那么b叫做文法符号A的综合属性。
编译原理 第02章_文法和语言的基本知识

2.3.2 语言的形式定义
S→01 | 0S1
S 0S100S11…0n-1S1n-10n1n * 即S0n1n
可见,此文法定义的语言为 L(G[S])={ 0n1n | n≥1}
2.3.2 语言的形式定义
例4 设有文法G[S]:S→0S | 1S |ε 该文法所定义的语言是什么?
由该文法所确定的语言为 L(G[S])={ε, 0, 1, 00, 01, 10, 11, …} ={ x | x∈{0,1}* }
2.3.1 文法的形式定义
2. 文法
规则的非空有穷集合,通常表示 成四元组 G={VN,VT, P, S } VN是规则中非终结符号的集合。 VT是规则中终结符号的集合。
P 是文法规则的集合。
2.3.1 文法的形式定义
S 是一个非终结符号,称为文法 的开始符号或文法的识别符号,它至 少要在一条规则中作为左部出现。由 它开始,识别出我们所定义的语言。 由文法定义可知,文法是对语言 结构的定义和描述,文法四大要素中 关键是规则的集合。
2.3.2 语言的形式定义
广义推导
* 0n表示从0出发,经0步或若干步, 可推导出n。 * 意味着 + 或者 = 。 也就是说0 n 0 n 0 n
对上例 E→E+T | T T→T*F | F F→(E) | i *E * i+i*i 我们有: E E
2.3.2 语言的形式定义
4. 句型和句子
设有文法G[S](S是文法G的开始符号) * 如果S x, x ∈(V ∪V )* 则称符号串x
N T
为文法G[S]的句型。 * x, x ∈V * 则称符号串x为文法 如果S T G[S]的句子。
2.3.2 语言的形式定义
编译原理概念_名词解释

编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语言程序,然后再执行目标程序。
解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句。
编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序(机器语言程序或汇编语言程序)。
解释程序和编译程序的根本区别:是否生成目标代码句子的二义性(这里的二义性是指语法结构上的。
):文法G[S]的一个句子如果能找到两种不同的最左推导(或最右推导),或者存在两棵不同的语法树,则称这个句子是二义性的。
文法的二义性:一个文法如果包含二义性的句子,则这个文法是二义文法,否则是无二义文法。
LL(1)的含义:(LL(1)文法是无二义的; LL(1)文法不含左递归)第1个L:从左到右扫描输入串第2个L:生成的是最左推导1:向右看1个输入符号便可决定选择哪个产生式某些非LL(1)文法到LL(1)文法的等价变换: 1. 提取公因子 2. 消除左递归文法符号的属性:单词的含义,即与文法符号相关的一些信息。
如,类型、值、存储地址等。
一个属性文法(attribute grammar)是一个三元组A=(G, V, F)G:上下文无关文法。
V:属性的有穷集。
每个属性与文法的一个终结符或非终结符相连。
属性与变量一样,可以进行计算和传递。
F:关于属性的断言或谓词(一组属性的计算规则)的有穷集。
断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的属性。
综合属性:若产生式左部的单非终结符A的属性值由右部各非终结符的属性值决定,则A的属性称为综合属继承属性:若产生式右部符号B的属性值是根据左部非终结符的属性值或者右部其它符号的属性值决定的,则B的属性为继承属性。
(1)非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性。
电子科技大学14秋《计算机编译原理》在线作业2答案

14秋《计算机编译原理》在线作业2单选题多选题判断题一、单选题(共15 道试题,共75 分。
)1. 描述一个语言的文法是。
A. 唯一的B. 不唯一的C. 可能唯一D. 可能不唯一-----------------选择:B2. 在编译程序中,语法分析分为自顶向下分析和自底向上分析两类:采用自顶向下分析方法时,要求文法中不含有()。
A. 右递归B. 左递归C. 直接右递归D. 直接左递归-----------------选择:B3. 算符文法是指()的文法。
①没有形如U::=...VW...的规则(U,V,W ∈VN)②终结符号集VT中任意两个符号对之间至多有一种优先关系成立③没有相同的规则右部④没有形如U::= ε的规则。
A. ①B. ①②C. ①②③D. ①②③④-----------------选择:A4. 如果文法G是无二义的,则它的任何句子α()。
A. 最左推导和最右推导对应的语法树必定相同B. 最左推导和最右推导对应的语法树可能不同C. 最左推导和最右推导必定相同D. 可能存在两个不同的最左推导,但它们对应的语法树相同-----------------选择:A5. 同心集合并有可能产生新的()冲突A. 归约B. “移进”/“移进”C. “移进”/“归约”D. “归约”/“归约”-----------------选择:D6. SLR(1)分析法的名字中,“R”的含义是()。
A. 自左向右进行分析B. 自右向左进行分析C. 采用最右推导的逆过程——最左归约。
编译原理 文法

我〈谓语 我〈动词〉〈直接宾语〉 我是〈直接宾语〉 我是〈名词〉 我是大学生
3
句子构成规则
“我是大学生”的构成符合上述规则,而法与否的依据,这些规则是一种元语言,
用它描述汉语。这里仅仅涉及汉语句子的结构描
述。其中一种起描述作用的元语言称为文法。
21
文法的定义
例: 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号
22
文法的定义
例 文法G=(VN,VT,P,S) VN ={标识符,字母,数字} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符>
19
文法和语言的形式定义
文法即是通过生成方式描述语言的:语言中的每个
句子可以用严格定义的规则来构造。下面给出文 法的定义。进而在文法定义的基础上,给出推导
的概念,句型、句子和语言的定义。
20
文法的定义
文法G定义为四元组(VN,VT,P,S )其中 VN为非终结符号(或语法实体,或变量)集; VT为终结符号集; P为产生式(也称规则)的集合; VN,VT和P是非空有穷集。 S称作识别符号或开始符号,它是一个非终结符,至少要 在一条产生式中作为左部出现。 VN和VT不含公共的元素,即VN ∩ VT = φ 用V表示VN ∪ VT ,称为文法G的字母表或字汇表 规则,也称产生式或生成式,是形如α→β或α∷=β的(α,β)有 序对,其中α是字母表V的正闭包V+中的一个符号,β是V* 中的一个符号。α称为规则的左部,β称作规则的右部。
第5章 属性文法与语义分析

• 属性文法的基本思想
目是将语言结构的语义以属性(attribute)的形式赋予代表此结构 的文法符号,而属性的计算以语义规则(semantic rules)的形 式赋予由文法符号组成的产生式。在进行语法分析推导或归约的 同时通过语义规则实现对属性的计算,以达到对语义的处理。
5.2.1 名字的作用域
程序设计语言范围的划分可以有两种不同的方式,并列 的和嵌套的。例如,Pascal语言的过程定义可以是嵌套的,即 一个过程内部可以再定义另一个过程;而C/C++语言的过程 只能是并列的,即过程中不能再定义过程。但是C/C++允许 程序块(block)嵌套,每个程序块的范围以{ }界定, { }内 可以再嵌套{ } 。
例:下述源程序说明了C的程序块符合上述作用域规则。
main( )
{ int a=0; int b=0;
/* 最外层,不妨定为B0层 */
{ int b=1;
/* B1层,被B0嵌套 */
{ int a=2; int c=4; int d=5; /* B2层,被B1嵌套 */ printf("%d %d\n",a,b);
当从某个作用域退出时,从栈顶把该作用域的所有名字全 部摘走,存放在一个不活动的临时表中,以备后用。例如, 当分析从B2退出并进入B3时,则把栈顶条目a=2摘走,而将 条目b=3加入。这种临时摘走的方式也称为临时删除或假删除 ,只有确认某名字永远不会再被使用,才被真正删除。
设符号表中有n个条目,那么成功查找的平均时间复杂度是 n/2,不成功查找的时间复杂度是n+1。因此,在符号表中插 入n个名字和完成e次查找的时间复杂度应该是n(n+e)。当n和e 很大时,在线性表上进行查找的效率显然很低。
第二章2.2.4 语法树与文法二义性

例3: G(E):E i| E + E| E * E| ( E )
2.2.4语法树
句型i * i + i
E
E
E
+
E
E
*
E
i
i
i
E* E
i E+ E
i
i
(i*i)+i
i*(i+i) 22
三、语法树的应用
2.2.4语法树
1、一个有用的定理 定义1 由某一结点及其所属分支组成的部分
树称为原树的一棵子树。 定义2 只有单层分支的子树称为简单子树。
E
+
T
TF|T*F F(E)|i
T
F i (1) *i (2) +i (3)
T* F
F
i
i
短语:i *i +i 、 i *i、 i i (1) 、i (2) 、 i (3)
简单短语: i (1) 、i (2) 、 i (3) 句柄: i (1)
35
文法G:
E
ET|E+T
E
+
T
TF|T*F F(E)|i
10
2.2.3 推导和归约
7.句子 设有文法G,S是文法G的开始符号,如果有: S
+ , ∈VT* 则称为G的句子。 7.语言
所有句子的集合称为文法的语言。 记作: L(G) = {α| S * , ∈VT* }
11
2.2.4 语法树与文法二义性
2.2.4 语法树
一、语法树(推导树、生成树或分析树)
产生式的形式为: 或 ::=
5
2.2.3 推导和归约
文法符号及其语义属性

V:有穷的属性集,每个属性与文法的一个终结符或非 终结符相连,这些属性代表与文法符号相关信息, 如它的类型、值、代码序列、符号表内容等等 .属 性与变量一样,可以进行计算和传递。属性加工 的过程即是语义处理的过程。
F:关于属性的属性断言或一组属性的计算规则(称为 语义规则) . 断言或语义规则与一个产生式相联,引 用该产生式左端或右端的终结符或非终结符相联 的属性.
for i :=1 to k do 从 Ci 结点到 b 结点构造一条有向边;
返回
29
6.2 基于属性文法的处理方法
例6.5: AXY ⇒ A.a:=f (X.x, Y.y) X.i:=g (A.a, Y.y)
X.x
A.a
X.i Y.y
30
6.2 基于属性文法的处理方法
3.例题
例6.6: 将下面的产生式应用于语法树中
⇒属性b依赖于属性c1,c2,…,ck
12
6.1 属性文法
2.VT—VN的属性
(1) VT — 只有综合属性,由词法分析器提供. (2) VN — 既可有综合属性也可有继承属性;
开始符号S的所有继承属性作为属性计算 前的初始值.
13
出现在产生式左边的继承属性和出现在产生式右边的 综合属性不由所给定的产生式的属性计算规则进行 计算,它们由其它产生式的属性规则计算或者由属 性计算器的参数提供。
产生式
语义规则
EE1+E2
E.val:=E1.val+E2.val
E
E1
+
val
val E2
⇒ E.Val是从 E1.val和E2.val 综合得出
val
31
产生式
第五章——属性文法

T1:= - c T2:=b * T1 T5:=T2+T2 a:=T5
(b)DAG的三地址代码
图示法
三地址代码特点:
1.三地址代码的语句类似于汇编语言代码。 2.语句可以带有符号标号,并且存在各种控 制流语句。 3.三地址代码可以存放在一个数组中。
三地址代码语句的具体实现: (记录)
第五章 语法制导翻译技术 中间代码生成
属性文法:Attributed
Grammar
描述语义的工具 语法制导翻译: Syntax-Directed Translation
几种中间代码表现形式
5.2 属性文法
接近形式化的语义描述方法
属性文法(A符号配 备若干相关的“属性”,对每个产生式都配备 一组属性的计算规则(语义规则Semantic Rules)。
A都有一组语义规则(Semantic Rules),每 条语义规则的形式为:
• b:=f(c1,c2,…,ck)
其中,f是一个函数,属性b与ci之间,或者
• (1)b是A的一个综合属性且c1,c2,…,ck是产生式右 边文法符号的属性;或者 • (2)b是产生式右边某文法符号的继承属性且 c1,c2,…,ck是A或产生式右边任何符号的属性。
简单算术表达式和赋值语句的翻译
(1) Aid := E { P:=lookup () ; if Pnil then emit( P“:=”E.place) else error } (2) EE1+E2 {E.place:= newtemp; emit(E.place“:=” E1.place“+”E2.place)}
E→T
T → T1 * F T→F
第二章--文法

第二章文法与语言一个程序设计语言是一个记号系统,同自然语言一样,它的完整的定义应包括语法和语义两个方面。
所谓一个语言的语法是指一组规则,用它可以形成和产生一个合适的程序。
上下文无关文法完全可以描述程序设计语言的语法。
语法规定了特定符号序列的合法性,而与符号的含义没有关系。
比如在C语言中,X=Y+Z、X+=Y、X++等都是合法的,而X=X*则非法。
这和我们在自然语言中遇到的情况相同。
但是在程序设计语言中,表达式组成部分的类型也决定着它们的合法性。
对于语义的分析与处理到目前为止仍然没有公认的形式系统用于自动构造正确的编译程序。
2.1 文法的概念从形式语言的角度看,一个语言也就是字符串集。
如果字符串集是有穷的,可以用枚举的办法表示出来。
当集合无穷时,枚举的办法就不行了,需要寻找合适的有穷表示方法----文法就是表示无穷字符串集的强有力的一种工具。
我们先来分析汉语句子的文法表示,采用巴克斯范式(BNF或EBNF):句子→主语·谓语主语→代词∣名词代词→我∣你∣他名词→司机∣农民∣学生∣汽车∣锄头谓语→动词·直接宾语动词→学习∣拿起∣开直接宾语→代词∣名词其中的每一条称为产生式或语法规则,符号“→”也可以写成“∷=”;符号“·”和“∣”是集合运算符号,“·”表示“连接”,该符号往往被省略,“∣”表示“或”,该符号两边的符号串称候选。
由上面的规则可以产生或推导出句子,引进符号“=>”表示推导,比如句子“司机开汽车”的推导过程为:句子=>主语·谓语=>名词·谓语=>司机·谓语=>司机·动词·直接宾语=>司机·开·直接宾语=>司机·开·名词=>司机开汽车试推导句子:农民拿起锄头2.2 符号和符号串每种程序设计都有它的字符集,其中的字符用来构造单词,单词构造更大的语法单位,<表达式>、<语句>等复合对象。
形式语义-Ch8 属性文法

第八章属性文法§8.1 简述属性文法( Attribute Grammar)的概念首先由Knuth在1968年提出。
顾名思意属性文法是带属性的一种文法。
虽称是文法,但它不是用来描述文法,而是用来描述文法符号的属性关系的。
因为其属性规则与产生式紧密相关,称它是面向文法的一种方法。
凡是与文法的相关的问题均可试用属性文法这一工具。
属性文法的最成功的应用是编译器的自动生成。
有过一些成功的系统,如GAG[kastens 82],HLP[Raiha 78],SDCG[paulson 82];一些现实程序设计语言的编译程序前端,也用属性文法生成出来,其中包括pascal[kastens&etal 82]和Ada[Unl&etal 82]。
属性文法可用来描述代码生成和优化[Ganapthi & Fisher 82][ Neal & Amirchachy 74],程序正确性与程序变换[Gernert 75],数据流分析[Farrow 77][Babich & Jazayerl 78]。
Reps利用AG实现了基于属性文法的语言的程序设计环境[Peps 83]。
为了方便起见,将knuth所提出的属性文法称为简单属性文法并记为AG。
在给出AG的形式定义之前, 首先考虑一个文法例(8.1.0),它产生二进制数。
二进制数由0,1和小数点“.”组成。
G[R]: 1. R→N 4. N→ND2. R→N.N 5. D→0 (8.1.0)3. N→D 6. D→1文法本身并不含什么意义,它只说明什么样的终极符串是合法的。
文法G[R]的合法终极符串(句子)为通常的二进制数, 可288––带小数点,但至多能带一个小数点。
根据定义10.1, 001、111等都是文法G[R]的合法句子。
那么它们究竟代表什么意义,可给出种种不同的定义。
假设就定义它们代表的是相应的十进制实数, 比如前面几个二进制表示分别代表实数2.5,1和7。
编译原理-属性文法和语法制导翻译

编译原理-属性⽂法和语法制导翻译1.属性⽂法:在上下⽂⽆关⽂法的基础上,为每个⽂法符号引进⼀组属性,且让该⽂法中的重写规则附加上语义规则时,称该上下⽂⽆关⽂法为属性⽂法。
(属性⽂法往往以语法制导定义和翻译模式两种形式出现。
具体说明问度娘)注意:(1)属性与变量⼀样,可以进⾏计算和传递。
(2)属性加⼯的过程即是语义处理的过程。
(3)属性分为综合属性(⽤于“⾃下⽽上”传递信息)和继承属性(⽤于“⾃上⽽下”传递信息)。
(1. 语义规则的形式:产⽣式A—>α的语义规则的形式为b:=f(c1,c2,…,ck)。
就是属性b依赖于属性c1,c2,…,ck。
其中:f是⼀个函数;b—A的综合属性,且c1,c2,…,ck是α中⽂法符号的属性;b—α中某个⽂法符号的继承属性, 且c1,c2,…,ck是A或α中任何⽂法符号的属性.(2.VT—VN的属性(1) VT — 只有综合属性,由词法分析器提供.(2) VN — 既可有综合属性也可有继承属性; 开始符号S的所有继承属性作为属性计算前的初始值.(3.属性的计算/获得(1)由该产⽣式提供的计算规则计算获得:产⽣式右边的继承属性,产⽣式左边的综合属性。
(2)由其它产⽣式的属性规则计算或由属性计算器的参数提供:产⽣式左边的继承属性,产⽣式右边的综合属性2.综合属性:通常使⽤⾃底向上的⽅法(由⼦确⽗),S—属性⽂法:仅使⽤综合属性的属性⽂法.3.继承属性:⽤继承属性来表⽰程序设计语⾔结构中的上下⽂依赖关系很⽅便.(由⽗兄却该结点继承属性)4.基于属性⽂法的处理⽅法:(1.依赖图:继承属性和综合属性之间的相互依赖关系的有向图。
构造过程:为每个包含过程调⽤的语义引⼊⼀个虚综合属性b,改写为b=f(c1,c2,…,ck)的形式-->为每个属性设置⼀个结点--->若属性b依赖于属性c,则从属性c的结点有⼀条有向边连到属性b的结点。
(2. 属性的计算次序:(1)良定义的:若⼀个属性⽂法不存在属性之间的循环依赖关系,则称该⽂法为良定义的。
4.2 属性文法

2016/6/23 3
文 法 符 号 的 属 性 可 分 为 继 承 属 性 (Inherited Attribute) 与综合属性 (Synthesized Attribute) 两 类。
继承属性用于“自上而下”传递信息。继承属性由 相应语法树中结点的 父结点及兄弟结点属性计算 得到,即沿语法树向下传递,由根结点到分枝 ( 子 ) 结点,它反映了对上下文依赖的特性。继承属性可 以很方便地用来表示程序语言上下文的结构关系。 综合属性用于“自下而上”传递信息。综合属性由 相应语法分析树中结点的分枝结点 (即子结点)属性 计算得到,其传递方向与继承属性相反,即沿语法 分析树向上传递,从分枝结点到根结点。
2016/6/23 10
说 明: 1) addtype:把每个id的类型信息(由L.in继 承)记录在符号表的相关项id.entry中; 2) 非终结符T有一个综合属性type,其值为 int或float。语义规则L.in=T.type表示L.in的 属性值由相应说明语句指定的类型T.type 决定; 3) 属性L.in被确定后将随语法树的逐步生 成而传递到下边的有关结点使用,这种结 点属性称为继承属性。 4) 标识符的类型可以通过继承属性的复写 规则来传递。
2016/6/23 7
说 明:
1) 每一个非终结符都有一个属性val来表示整型 值,如 E.val表示E的整型值,而i.lexval则表示i 的整型内部值。 2) 与产生式关联的每一个语义规则的左部符号 E、 T、 F 等的属性值的计算由其各自相应的右 部符号决定,这种属性也称为综合属性。 3) 与产生式 S→E 关联的语义规则是一个函数 print(E.val),其功能是打印E产生式的值。 4) S在语义规则中没有出现,可以理解为其属 性是一个虚属性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2)终结符只有综合属性,它们由词法程序提供.
6.1 属性文法
3.属性的计算/获得
在上下文无关文法的基础上,为每个文法符 号(终结符或非终结符)引进一组属性,且让该文 法中的重写规则附加上语义规则时,称该上下文无 关文法为属性文法。
注:语法制导翻译是指在语法分析的过程中,完成附加在所使 用的产生式上的语义规则所描述的动作。
10
属性文法
属性文法(attribute grammar)是一个三元组: A=(G,V,F),其中
文法符号及其语义属性
引言
• 后面要讨论的中间代码生成,是指把单词符号串形式的源程 序转换为另一种等价的便于代码优化处理和目标代码生成的 表示方法。
• 目前常见的中间语言有逆波兰表示、三元式、四元式等等。
• 遗憾的是,中间代码生成与语言的语义密切相关,而语义的 形式化描述是一件非常困难的事情;
• 存在一种称为语法制导翻译的模式,这种模式实际上是对上 下文无关文法的一种扩充。
6.1 属性文法
二、基本规则
1. 语义规则的形式:
产生式Aα的语义规则的形式为b:=f(c1,c2,…,ck)
其中:(1) f是一个函数;通常以表达式的形式出现
b有 (2) 或者b—A的综合属性,且c1,c2,…,ck是α中文法
两种 可能
符号的属性;
(3) 或者b—α中某个文法符号的继承属性, 且c1,c2,…,ck是A或α中任何文法符号的属性.
G:是一个上下文无关文法
V:有穷的属性集,每个属性与文法的一个终结符或非 终结符相连,这些属性代表与文法符号相关信息, 如它的类型、值、代码序列、符号表内容等等 .属 性与变量一样,可以进行计算和传递。属性加工 的过程即是语义处理的过程。
F:关于属性的属性断言或一组属性的计算规则(称为 语义规则) . 断言或语义规则与一个产生式相联,引 用该产生式左端或右端的终结符或非终结符相联 的属性.
(1) 产生式右边的继承属性 产生式左边的综合属性
由该产生式提供的计 算规则计算获得
(2) 产生式左边的继承属性 产生式右边的综合属性
由其它产生式的属性 规则计算或由属性计 算器的参数提供
15
6.1 属性文法
例6.1:考虑非终结符A,B和C,其中,A有一个继承属性
a和一个综合属性b,B有综合属性c,C有继承属
T + E … #
语义分 析栈 T.Val ‘+’
…
语义处理(语义分析和中间代码生成)
在编译中的逻辑阶段
源语言程序
词法分析
前
语法分析
端
处
理
语义分析
语 义
处
理 中间代码生成
中间代码
后
端
代码生成
处
理
汇编代码
语义处理
源语言程序
词法分析前语法Fra bibliotek析端处
理
语义分析
语 义 处 理
后 端
代码生成
处
理
汇编代码
第六章 属性文法和语法制导翻译
语义规则 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
17
6.1 属性文法
文法符号及其语义属性
• 例如,文法G[E]:
产生式
语义子程序
E→E(1)+T {E.Val=E(1).val+T.val;}
E→T {E.Val=T.Val;}
T→digit
{T.Val=digit;}
• 为了能在语法分析过程中平行地进行 语义处理,可在语法分析栈旁边并行 地设置一个语义信息栈
语法分 析栈
⇒属性b依赖于属性c1,c2,…,ck
12
6.1 属性文法
2.VT—VN的属性
(1) VT — 只有综合属性,由词法分析器提供. (2) VN — 既可有综合属性也可有继承属性;
开始符号S的所有继承属性作为属性计算 前的初始值.
13
出现在产生式左边的继承属性和出现在产生式右边的 综合属性不由所给定的产生式的属性计算规则进行 计算,它们由其它产生式的属性规则计算或者由属 性计算器的参数提供。
性d。
产生式ABC可能有规则:
A.a—左部继承属性 A.b—左部综合属性
C.d:=B.c+1 A.b:=A.a+B.c
B.c—右部综合属性 C.d—右部继承属性
属性A.a和B.c在其它地方计算。
16
6.1 属性文法
例6.2: 一个简单台式计算器的属性文法
产生式 LEn EE1+T ET TT1*F TF F(E) Fdigit
• 由此可见,抽象文法符号的具体语义信息,是在与语法分 析同步的语义处理过程中获取和加工的。
• 文法符号X的语义信息我们称之为语义属性或简称为属性 (Attributes)。
• 我们用形如X.ATTR的记号来表示文法符号X的相关语义属 性。
• 如果一个文法符号X在一产生式中多次出现,为了在语义 上能够对其进行区分,可添加不同的上标。
6.1 属性文法 6.2 基于属性文法的处理方法 6.3 S—属性文法的自下而上计算 6.4 L—属性文法和自顶向下翻译 6.5 自下而上计算继承属性
7
6.1 属性文法 一、基本概念
1.属性
广义:用以描述事物或人的特征、性质、品质等等。 狭义:代表与文法符号相关的信息,其信息值即为
属性值。 例如:其类型、值、代码序列、符号表内容等。
• 方法:对文法中的每个产生式都附加一个语义动作或语义子程 序,在语法分析过程中,每当需要使用一个产生式进行推导或 归约,语法分析程序除执行相应的语法分析动作外,还要执 行相应的语义动作或调用相应的语义子程序。
引言(续)
• 这种模式既把语法分析与语义处理分开,又令其平行地进 行,让其在同一遍扫描中同时完成语法分析和语义处理两 项工作。
8
6.1 属性文法
注:
(1)属性与变量一样,可以进行计算和传递。 (2)属性加工的过程即是语义处理的过程。 (3)属性 综合属性:用于“自下而上”传递信息。
继承属性:用于“自上而下”传递信息。
9
6.1 属性文法
2. 语义规则
为文法的每一个产生式配备的计算属性的计 算规则,称为语义规则。
3. 属性文法