最新编译原理-第六章习题答案教案资料

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

上一页
下一页
12
注意:
Ø 如果同一文法符号在文法规则中出现不止一次,那么每次必须用合适 的下标与在其他地方出现的符号区分开来。
Ø 终结符只有综合属性,它们由词法分析器提供。
Ø 非终结符既可有综合属性也可有继承属性,文法开始符的所有继承属 性为属性计算前的初始值。
Ø 属性计算规则中仅能使用相应产生式中文法符号的属性(封装性)。
上一页
下一页
8
例6.2:无符号整数的属性文法
上一页
下一页
9
1.2 属性的分类
• 综合属性:用于自下而上传递信息;在语法树中,一个结点的综合属性由其子 结点的属性值确定,因此,通常使用自底向上的方法在每一个结点处使用语义规 则计算综合属性的值。仅仅使用综合属性的属性文法称S-属性文法。 • 继承属性:用于自上而下传递信息;在语法树中,一个结点的继承属性由此结 点的父结点和/或兄弟结点的某些属性确定。
上一页
下一页
5
1.1 属性文法的概念
(1)属性文法的定义 在上下文无关文法的基础上,为每个文法符号(终 结符和非终结符)配备若干相关的“值”(也称: “属性”),对于文法的每个产生式都配备了一组属 性的计算规则(语义规则),这种文法称为属性文法。 1968年,Knuth首先提出。
说明:在一般情况下,整个属性文法是非常复杂的。但 属性的函数关系却通常非常简单。属性也很少依赖于 大量的其它属性,因此可以将相互依赖的属性分割成 较小的独立属性集,然后单独对每一属性集写出一个 属性文法。
编译原理-第六章习题答案
本章的主要内容
▪ 属性文法和语法制导的翻译的概念 ▪ 综合属性和继承属性的概念、特点 ▪ S-属性文法与L-属性文法的概念及分析方法 ▪ 翻译模式 ▪ 递归下降翻译器的设计
上一页
下一页
2
本章要求
▪ 知识点:语法制导定义,S-属性定义及其自底向上计算 属性,L-属性定义,自顶向下的翻译,自底向上计算继 承属性。
上一页
下一页
15
2.2 依赖图
a.依赖图:一种有向图,在一颗语法树中表示结点的继承属性和综合属性之间 的相互依赖关系(这种属性之间的依赖关系由文法的语义规则确定)。
b.依赖图的构造方法: for 语法树中每一结点n do for 结点n的文法符号的每一个属性a do 为a在依赖图中建立一个结点; for 语法树中每一个结点n do for 结点n所有产生式对应的每一条语义规则 b=f(c1,c2,…,ck ) do for i=1 to k do 从结点ci到结点b构造一条有向边;
例6.3 属性文法为例6.1中的属性文法,输入:3*5+4n
L
Eval:=19
n
Eval:=15
+
Tval:=4
Tval:=15
Tval:=3 Fval:=3
*
Fval:=5
digitlexval:=5
Fval:=4 digitlexval:=4
digitlexval:=3
上一页
下一页
10
例6.4 继承属性的类型说明文法
上一页
下一页
14
2.1 语法制导翻译
基于属性文法的处理过程通常是:对单词符号串进行 语法分析,构造语法分析树,然后根据需要遍历语法树, 并在语法树的各结点处按语义规则进行计算。
输入串
分析树
依赖图
图6.1 语法制导翻译的概观
语义规则的计算
在具体实现时,一般都是随语法分析的进展,识别出一
个语法结构,就对它的语义进行分析和翻译。也就是语义 分析是伴随语法分析的过程进行。
Ø 产生式左边的继承属性和产生式右边的文法符号的综合属性由其它产 生式的属性规则计算。
Ø 一个句型的语法树可以加以扩充,用来表示句型分析中得到的各个符 号的属性间的关系:
语法树中,一个结点的综合属性的值由其子结点的属性值确定
语法树中,一个结点的继承属性的值由该结点的父结点和(或)兄 弟结点的某些属性值确定
D T.type=real
L.in=real
real
L.in=real ,
L.in=real , id2
id1
id3
real id1,id2,id3
上一页
下一页
11
1.3 属性的计算规则
属性的计算规则:设有产生式A→ 定义 b= f(c1,c2,……,ck )f是一个计算函数,并且 (1)b是A的一个综合属性,并且c1,c2,……,ck是产 生式右边文法符号的属性。或者: (2)b是产生式右边某文法符号的一个继承属性,并且 c1,c2,……,ck是A或产生式右边任何文法符号的属性。
上一页
下一页
6
(2)属性(Attribute)是编程语言结构的任意特性。属性在其包含 的信息和复杂性等方面变化很大。属性的典型例子有:
• 变量的数据类型 • 表达式的值 • 存储器中变量的位置 • 程序的目标代码 • 数的有效位数 (3)属性文法一般表示方法:
上一页
下一页
7
例6.1 一个简单台式计算器的属性文法
上一页
下一页
13
本章教学线索
1 属性文法(属性翻译文法) 2 基于属性文法的处理办法
2.1 语法制导翻译 2.2 依赖图 2.3 树遍历的属性计算方法 2.4 一遍扫描的处理办法 2.5 抽象语法树(Abstract Syntax tree)
3 S-属性文法的自下而上计算 4 L-属性文法和自顶向下翻译 5 自下而上计算继承属性
▪ 深刻理解:属性,综合属性,继承属性,依赖图,计算 顺序,语法树,语法制导定义,S-属性文法定义,L-属 性文法定义,翻译模式。
▪ 熟练掌握:对于已知文法G和翻译任务,构造其L-属性 定义,将其改造成适于自顶向下分析或自底向上分析的 翻译模式。
上一页
下一页
3
本章教学线索
1 属性文法(属性翻译文法)
1.1 属性文法的概念 1.2 属性的分类 1.3 属性的计算规则
2 基于属性文法的处理办法 3 S-属性文法的自下而上计算 4 L-属性文法和自顶向下翻译 5 自下而上计算继承属性
上一页
下ຫໍສະໝຸດ Baidu页
4
1 属性文法(属性翻译文法)
语法制导翻译:通过给语法树上各个符号赋予一定的含义 并且将各个符号进行有结构的连接,可以形成语言的具 体语句的含义。这给予我们以启示:可以通过扩充文法, 在文法符号上附着某些语义信息,并在这些语义信息间建 立相互计算关系,从而在语法分析的同时进行语义分析。 由于这种分析是在语法分析的控制下进行的,故称为语法 制导翻译。
相关文档
最新文档