语法制导翻译
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
| Expr^ Expr {$$.
| Expr ‘*’ Expr {$$=$1*$3;}
➢ 在第三小节中我们将介绍几种常见的中间语言; 1 简单赋值语句文法的属性文法
B<C的真、假出口也分别是整个表达式的真、假出口。
➢ 在第四小节中引入程序设计语言中常见语法结构 4.综合属性的定义规则为:①对于给定的产生式p: Y→X1X2…Xn∈P,Y的综合属性值由p中某些符号的属性计算:
语法制导翻译
5.1 引言
➢ 在早期的一些编译程序中,是在语法分析的基础上根据源程序中各 语法成份的语义,直接产生机器语言或汇编语言形式的目标代码。
➢ 现在的编译系统一般都将经过语法分析的源程序先翻译为某种形式 的中间语言代码,然后再将其翻译为目标代码。
➢ 优点:
➢ 使编译程序各组成部分功能更单一;
b)∈DDP(p),则称属性Xj.
①在两种表示中,运算对象出现的顺序相同;
PLACE=NewTemp();
GEN(+,$1.
2 表达式属性翻译文法:
1 语义属性与属性文法
产生式
语义子程序
5.2 属性文法与属性翻译文法
➢ 语法制导翻译方法的实质,就是根据文法中每个产 生式所蕴含的语义,为其配备一个(或多个)处理 语句或子程序,对所要完成的功能进行描述。
➢ 使得编译程序的逻辑结构更为清晰,从而使编译程序更易于编 写与调整;同时为代码优化和程序的可移植性提供了条件
➢ 本章要讨论的中间代码生成,是指把单词符号串形式的源程序转换 为另一种等价的便于代码优化处理和目标代码生成表示。
➢ 目前常见的中间语言有逆波兰表示、三元式、四元式等等。 ➢ 中间代码生成与语言的语义密切相关,目前采用语法制导翻译来描
➢ 产生式的语义是由组成该产生式的文法符号的语义
所决定的。 ➢ 将这些语义以“属性”的形式附加到各个文法符号
上,再根据产生式所蕴含的语义,给出每个文法符 号的属性的求值规则,从而形成一种附带有语义属 性的前后文无关文法,即属性文法。
5.2.1 语义属性与属性文法
➢ 定义 5.1 一文法符号的语义性质称为该文法符号的 语义属性(Attributes),简称为属性。用A(X)表 示X的所有属性的集合。每个属性表示X的一个特定 性质,并可任意指定其取值范围。我们用X.a表示 A(X)中的属性a 。
定义 5.3 对每个产生式p:X0→X1X2…Xn ,设属性定义性出现的集 合为
AF(p)={Xi.a|Xi.a=f(Xk1.ak1,…,Xkm.akm)∈ R(p),0≤kj≤n} 若Xi是产生式左部的非终结符(即i=0),则称属性Xi.a是综合属性;
若Xi出现在产生式的右部(即1≤i≤n),则称Xi.a是继承属性
述语义。 ➢ 方法:对文法中的每个产生式都附加一个语义动作或语义子程序,
语法分析程序除执行相应的语法分析动作外,还要执行相应的语义 动作或调用相应的语义子程序。
5.1 引言(续)
➢ 这种模式既把语法分析与语义处理分开,又令其平行地进行,让其在 同一遍扫描中同时完成语法分析和语义处理两项工作。
➢ 由此可见,抽象文法符号的具体语义信息,是在与语法分析同步的语 义处理过程中获取和加工的。
加注语法树
➢ 在语法树中,将每个结点均视为由若干个域组成的结构,则可 将其中的一些域用来存放相应文法符号诸属性之值,并可用 属性来为这些域命名。通常我们将每个结点都标注相应属性 值的语法树称为加注语法树
➢ 由定义5.3可知:在加注语法树中,一个文法符号X在相应结 点的综合属性之值,由其子结点的属性和(或)X的其它属性, 通过相关属性规则经计算而得,故综合属性的求值在语法树 中是按自下而上的方式进行的;X的继承属性之值则由X的父 结点和(或)其它兄弟结点来定义,故继承属性的求值将按自上 而下的方式进行。
属性依赖关系
各个文法符号的属性之间,可能存在某种依赖关系,这种依赖关 系可用属性规则(语义规则)定义。
定义 5.2 设p:X0→X1X2…Xn是文法G的一个产生式,则与p相关联
的属性规则集
R(p)={Xi.a=f(Xk1.ak1,…,Xkm.akm)|Xi.a∈A(Xi)}
定义了该产生式所涉及的文法符号之属性的求值规则,它表示: Xi的a属性是由Xk1的ak1属性,…,Xkm的akm属性计算而得的。
(2)在G的任意一个语法树中,对文法符号X的每一次出现,可用于计算X的每个属性之值的规则至多有一条。 运算的结果将放入result中。
的语法制导翻译技术。 如果一个文法符号X在一产生式中多次出现,为了在语义上能够对其进行区分,可添加不同的上标。
根据DT(T)所构造的关系图称为依赖关系图(或简称为依赖图)。
➢ 我们用形如X.ATTR的记号来表示文法符号 X的相关语义属性。
➢ 如果一个文法符号X在一产生式中多次出现, 为了在语义上能够对其进行区分,可添加不
同的上标。
➢ 例如,文法G[E]:
产生式
语义子程序
E→E(1)+T
{E.Val=E(1).val+T.val;}
E→T
{E.Val=T.Val;}
T→digit
➢ 属性可表征诸如数、符号串、类型、存储空间和其 它需表征的实体。
➢ 终结符至少有一种属性,即词文。它还可能具有其 它属性,例如无符号数123,单词“123”就是它的 词文,而其数值以及它的类型(整型)是它的其它 两个属性。终结符的属性是其内在性质.
➢ 非终结符的属性是从其它符号的属性经计算而得的, 即由其它符号的属性定义的。
{T.Val=digit;}
➢ 为了能在语法分析过程中平行地进行语义处 理,可在语法分析栈旁边并行地设置一个语 义信息栈
语法分 语义分
析栈
析栈
T
T.Val
+
‘+’
E
…
…
#
本章内容简介
➢ 首先介绍一种适用于定义语义的一译的文法
属性翻译文法的相关知识。 方法符号属性的求值顺序
➢ 文法符号X的语义信息我们称之为语义属性或简称为属性 (Attributes)。
➢ 我们用形如X.ATTR的记号来表示文法符号X的相关语义属性。 ➢ 如果一个文法符号X在一产生式中多次出现,为了在语义上能够对其
进行区分,可添加不同的上标。
文法符号及其语义属性
➢ 文法符号X的语义信息我们称之为语义属性 或简称为属性(Attributes)。
| Expr ‘*’ Expr {$$=$1*$3;}
➢ 在第三小节中我们将介绍几种常见的中间语言; 1 简单赋值语句文法的属性文法
B<C的真、假出口也分别是整个表达式的真、假出口。
➢ 在第四小节中引入程序设计语言中常见语法结构 4.综合属性的定义规则为:①对于给定的产生式p: Y→X1X2…Xn∈P,Y的综合属性值由p中某些符号的属性计算:
语法制导翻译
5.1 引言
➢ 在早期的一些编译程序中,是在语法分析的基础上根据源程序中各 语法成份的语义,直接产生机器语言或汇编语言形式的目标代码。
➢ 现在的编译系统一般都将经过语法分析的源程序先翻译为某种形式 的中间语言代码,然后再将其翻译为目标代码。
➢ 优点:
➢ 使编译程序各组成部分功能更单一;
b)∈DDP(p),则称属性Xj.
①在两种表示中,运算对象出现的顺序相同;
PLACE=NewTemp();
GEN(+,$1.
2 表达式属性翻译文法:
1 语义属性与属性文法
产生式
语义子程序
5.2 属性文法与属性翻译文法
➢ 语法制导翻译方法的实质,就是根据文法中每个产 生式所蕴含的语义,为其配备一个(或多个)处理 语句或子程序,对所要完成的功能进行描述。
➢ 使得编译程序的逻辑结构更为清晰,从而使编译程序更易于编 写与调整;同时为代码优化和程序的可移植性提供了条件
➢ 本章要讨论的中间代码生成,是指把单词符号串形式的源程序转换 为另一种等价的便于代码优化处理和目标代码生成表示。
➢ 目前常见的中间语言有逆波兰表示、三元式、四元式等等。 ➢ 中间代码生成与语言的语义密切相关,目前采用语法制导翻译来描
➢ 产生式的语义是由组成该产生式的文法符号的语义
所决定的。 ➢ 将这些语义以“属性”的形式附加到各个文法符号
上,再根据产生式所蕴含的语义,给出每个文法符 号的属性的求值规则,从而形成一种附带有语义属 性的前后文无关文法,即属性文法。
5.2.1 语义属性与属性文法
➢ 定义 5.1 一文法符号的语义性质称为该文法符号的 语义属性(Attributes),简称为属性。用A(X)表 示X的所有属性的集合。每个属性表示X的一个特定 性质,并可任意指定其取值范围。我们用X.a表示 A(X)中的属性a 。
定义 5.3 对每个产生式p:X0→X1X2…Xn ,设属性定义性出现的集 合为
AF(p)={Xi.a|Xi.a=f(Xk1.ak1,…,Xkm.akm)∈ R(p),0≤kj≤n} 若Xi是产生式左部的非终结符(即i=0),则称属性Xi.a是综合属性;
若Xi出现在产生式的右部(即1≤i≤n),则称Xi.a是继承属性
述语义。 ➢ 方法:对文法中的每个产生式都附加一个语义动作或语义子程序,
语法分析程序除执行相应的语法分析动作外,还要执行相应的语义 动作或调用相应的语义子程序。
5.1 引言(续)
➢ 这种模式既把语法分析与语义处理分开,又令其平行地进行,让其在 同一遍扫描中同时完成语法分析和语义处理两项工作。
➢ 由此可见,抽象文法符号的具体语义信息,是在与语法分析同步的语 义处理过程中获取和加工的。
加注语法树
➢ 在语法树中,将每个结点均视为由若干个域组成的结构,则可 将其中的一些域用来存放相应文法符号诸属性之值,并可用 属性来为这些域命名。通常我们将每个结点都标注相应属性 值的语法树称为加注语法树
➢ 由定义5.3可知:在加注语法树中,一个文法符号X在相应结 点的综合属性之值,由其子结点的属性和(或)X的其它属性, 通过相关属性规则经计算而得,故综合属性的求值在语法树 中是按自下而上的方式进行的;X的继承属性之值则由X的父 结点和(或)其它兄弟结点来定义,故继承属性的求值将按自上 而下的方式进行。
属性依赖关系
各个文法符号的属性之间,可能存在某种依赖关系,这种依赖关 系可用属性规则(语义规则)定义。
定义 5.2 设p:X0→X1X2…Xn是文法G的一个产生式,则与p相关联
的属性规则集
R(p)={Xi.a=f(Xk1.ak1,…,Xkm.akm)|Xi.a∈A(Xi)}
定义了该产生式所涉及的文法符号之属性的求值规则,它表示: Xi的a属性是由Xk1的ak1属性,…,Xkm的akm属性计算而得的。
(2)在G的任意一个语法树中,对文法符号X的每一次出现,可用于计算X的每个属性之值的规则至多有一条。 运算的结果将放入result中。
的语法制导翻译技术。 如果一个文法符号X在一产生式中多次出现,为了在语义上能够对其进行区分,可添加不同的上标。
根据DT(T)所构造的关系图称为依赖关系图(或简称为依赖图)。
➢ 我们用形如X.ATTR的记号来表示文法符号 X的相关语义属性。
➢ 如果一个文法符号X在一产生式中多次出现, 为了在语义上能够对其进行区分,可添加不
同的上标。
➢ 例如,文法G[E]:
产生式
语义子程序
E→E(1)+T
{E.Val=E(1).val+T.val;}
E→T
{E.Val=T.Val;}
T→digit
➢ 属性可表征诸如数、符号串、类型、存储空间和其 它需表征的实体。
➢ 终结符至少有一种属性,即词文。它还可能具有其 它属性,例如无符号数123,单词“123”就是它的 词文,而其数值以及它的类型(整型)是它的其它 两个属性。终结符的属性是其内在性质.
➢ 非终结符的属性是从其它符号的属性经计算而得的, 即由其它符号的属性定义的。
{T.Val=digit;}
➢ 为了能在语法分析过程中平行地进行语义处 理,可在语法分析栈旁边并行地设置一个语 义信息栈
语法分 语义分
析栈
析栈
T
T.Val
+
‘+’
E
…
…
#
本章内容简介
➢ 首先介绍一种适用于定义语义的一译的文法
属性翻译文法的相关知识。 方法符号属性的求值顺序
➢ 文法符号X的语义信息我们称之为语义属性或简称为属性 (Attributes)。
➢ 我们用形如X.ATTR的记号来表示文法符号X的相关语义属性。 ➢ 如果一个文法符号X在一产生式中多次出现,为了在语义上能够对其
进行区分,可添加不同的上标。
文法符号及其语义属性
➢ 文法符号X的语义信息我们称之为语义属性 或简称为属性(Attributes)。