其中a,b,c,d,e表示变量,最后将结果存放在某个临时变量t中 虽然,汇编语言较三元式、四元式有上述三个优点,但 汇编语言与它们相比还有一些明显的缺点,就是依赖于计算 机系统。这样对于编译程序设计者来说,需熟悉不同的计算 机系统的特点。因而使得开发周期延长,工作效率降低。汇 到目标语言的过程要比翻译三元式、四元式到目标语言的过 程要复杂
其中a,b,c,d,e表示变量,最后将结果存放在某个临时变量t i中。 虽然,汇编语言较三元式、四元式有上述三个优点,但 汇编语言与它们相比还有一些明显的缺点,就是依赖于计算 机系统。这样对于编译程序设计者来说,需熟悉不同的计算 机系统的特点。因而使得开发周期延长,工作效率降低。汇 编程序实际上也是一个小型的编译程序,因而翻译汇编语言 到目标语言的过程要比翻译三元式、四元式到目标语言的过 程要复杂
6.2语法制导翻译 下面讨论编译程序是如何把源程序翻译成相应的中间代 码的。由于语义规则的定义要比语法的定义复杂得多,至今 没有一种从理论上和实际上都完备的方法。目前大多数采用 的方法是所谓的语法制导翻译的方法,语法制导翻译的思想 方法是把语言的一些属性附加到代表语言结构的文法的符号 上,这些属性值是由附加到文法产生式的“语义规则”计算, 也就是为每个产生式配上翻译子程序,即语义子程序。语义 子程序的语义规则的计算可以产生代码、把信息存入符号表、 显示出错信息等等。语法制导翻译的含义是在语法分析过程 中,在自顶向下的分析方法中当一个产生式获得匹配或在自 就进入工作,完成既定的翻译工 既定的翻译工作主要有 两方面,其一寔审査语法结构的静态语文,即验证语法结构 合法的程序是否真正有意义。其二是如果静态语义正确,则 要将源程序翻译成一种中间表示形式,即用中间语言表示源 程序的语义
6.2 语法制导翻译 下面讨论编译程序是如何把源程序翻译成相应的中间代 码的。由于语义规则的定义要比语法的定义复杂得多,至今 没有一种从理论上和实际上都完备的方法。目前大多数采用 的方法是所谓的语法制导翻译的方法,语法制导翻译的思想 方法是把语言的一些属性附加到代表语言结构的文法的符号 上,这些属性值是由附加到文法产生式的“语义规则”计算, 也就是为每个产生式配上翻译子程序,即语义子程序。语义 子程序的语义规则的计算可以产生代码、把信息存入符号表、 显示出错信息等等。语法制导翻译的含义是在语法分析过程 中,在自顶向下的分析方法中当一个产生式获得匹配或在自 底向上的分析方法中用于归约时,则相应产生的语义子程序 就进入工作,完成既定的翻译工作。既定的翻译工作主要有 两方面,其一是审查语法结构的静态语义,即验证语法结构 合法的程序是否真正有意义。其二是如果静态语义正确,则 要将源程序翻译成一种中间表示形式,即用中间语言表示源 程序的语义
62.1计算表达式的制导翻译 从形式语义的角度来看,语法制导翻译不是一种理论上 完备的语义分析方法。形式语义是一门学科,它主要研究语 言的语义表示。就目前来说,有各种方法和记号系统推出, 如操作语义学,公理语义学和指称语义学。但无论那一种方 法,都存在着缺陷,如其本身的 系统复杂,其描述文本 易读性差,也就是说,目前尚不能借助于这些形式系统来自 动完成语义处理任务。因此目前仍只能采用是接近形式化的 制导翻译。在这里以属性文法为工具来说明程序设计语言的 语义,一个属性文法它包含一个上下文无关文法和一系列语 义规则,这些语规则附在文法的每个产生式上,如在自顶向 父類刘酵踹作,发赎燹在所使用的产生 在语法制导定义中,每个文法符号有一组属性,对于每个文 法产生式A>a有一组形式为b:=f(c1C2,c的语义规则, 即属性b是由属性c1C2:C决定的。其中b和c1,C2
6.2.1 计算表达式的制导翻译 从形式语义的角度来看,语法制导翻译不是一种理论上 完备的语义分析方法。形式语义是一门学科,它主要研究语 言的语义表示。就目前来说,有各种方法和记号系统推出, 如操作语义学,公理语义学和指称语义学。但无论那一种方 法,都存在着缺陷,如其本身的符号系统复杂,其描述文本 易读性差,也就是说,目前尚不能借助于这些形式系统来自 动完成语义处理任务。因此目前仍只能采用是接近形式化的 制导翻译。在这里以属性文法为工具来说明程序设计语言的 语义,一个属性文法它包含一个上下文无关文法和一系列语 义规则,这些语规则附在文法的每个产生式上,如在自顶向 下的语法分析过程中,当归约时就完成附加在所使用的产生 式上的语义规则的动作,从而实现语义处理。 在语法制导定义中,每个文法符号有一组属性,对于每个文 法产生式A→α有一组形式为b:=f(c1 , c2 ,……ck )的语义规则, 即属性b是由属性c1 , c2 ,……ck决定的。其中b和c1 , c2 ,……ck 是该产生式中文法符号的属性
定义6-1 符号的属性或A的非b属性,那么b做文法符号A的综文法 如果b是A的属性, 是产生式右部a中 定义6-2 如果b是产生式右部a某个文法符号的属性,C1 是A的属性或产生式右部文法符号的属性,那么b 文法符号A的继承属性。 从上定义可以看出,综合属性是对于产生式左部属性都 是由产生式右部文法符号的属性和产生式左部文法符号的其 它属性来决定的。即在语法树的角度看是从孩子往的双亲传 送属性。而继承属性是产生式右部文法符号属性是由产生式 左部文法符号的属性和产生式右部文法符号的其它属性决定 的。即在语法树的的角度看是从双亲向孩子传送属性或由兄 弟之间传送属性
定义 6-1 如果b是A的属性,c1 , c2 ,……ck是产生式右部α中的文法 符号的属性或A的非b属性,那么b叫做文法符号A的综合属 性 定义 6-2 如果b是产生式右部α某个文法符号的属性,c1 , c2 ,……ck是A的属性或产生式右部文法符号的属性,那么b叫 做文法符号A的继承属性。 从上定义可以看出,综合属性是对于产生式左部属性都 是由产生式右部文法符号的属性和产生式左部文法符号的其 它属性来决定的。即在语法树的角度看是从孩子往的双亲传 送属性。而继承属性是产生式右部文法符号属性是由产生式 左部文法符号的属性和产生式右部文法符号的其它属性决定 的。即在语法树的的角度看是从双亲向孩子传送属性或由兄 弟之间传送属性
显然每个文法符号的综合属性集和继承属性集的交为空,也 就是一个属性不可能既是综合属性,又是继承属性。 定义6-3 如果一个语法制导定义是S属性的,则每个产生式的属性, 均是综合属性。 属性文法的语义规则可以写成无函数副作用的语法制导 定义。语义规则的函数可以是表达式或相应的函数或过程的 调用,也可以是程序段
显然每个文法符号的综合属性集和继承属性集的交为空,也 就是一个属性不可能既是综合属性,又是继承属性。 定义 6-3 如果一个语法制导定义是S属性的,则每个产生式的属性, 均是综合属性。 属性文法的语义规则可以写成无函数副作用的语法制导 定义。语义规则的函数可以是表达式或相应的函数或过程的 调用,也可以是程序段