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