第五章 语法制导翻译及中间代码生成(1)

本文探讨了编译程序的工作原理,特别是从词法分析到语法分析的过程,并重点介绍了现代编译系统如何通过生成中间代码来提高代码质量和优化可能性。此外,还讨论了语法制导翻译的概念及其在编译过程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      由于编译程序工作的最终目标是将源程序翻译成可供计算机直接执行的目标程序,所以从整个编译过程来看,词法分析与语法分析仅仅是编译程序工作的一小部分。在早期的一些编译程序中,是在语法分析的基础上根据源程序中各语法成分的语义,直接产生机器语言或汇编语言形式的目标代码。虽然这种编译方式所需的时间较少,但具有很大的局限性,如不利于优化,编译程序难以移植,代码质量不高,等等。现在的编译系统,一般都是将经过语法分析的源程序先翻译为某种形式的中间语言代码,然后再将其翻译为目标代码,这样就使编译程序各组成部分功能更单一,编译程序的逻辑结构更为清晰,从而使得编译程序更易于编写与调整,同时也为代码优化和编译程序的移植创造了条件。

       对于中间代码生成来说,我们也自然希望同样能够形式化地自动生成。遗憾的是,中间代码生成与语言的语义密切相关,而语义的形式化描述是一个非常困难的课题,时至今日,还没有一个被广泛接受的、可用于描述中间代码生成所需的全部语义动作的形式化系统

       然而,尽管如此,却存在一种称为语法制导翻译的模式(Syntax-Directed TranslationSchenmSDTS),这种模式实际上是对前后文无关文法的一种扩充。概括地说,就是对文法中的每个产生式都附加一个语义动作或语义子程序,且在语法分析过程中,每当需要使用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作外,还要执行相应的语义动作或调用相应的语义子程序每个语义子程序都指明了相应产生式中各个符号的具体含义,并规定了使用该产生式进行分析时所应采取的语义动作(如传送或处理信息、查填符号表、计算值、产生中间代码等等)。这种模式既把语法分析与语义处理分开又令其平行地进行,从而在同一遍扫描中同时完成语法分析和语义处理两项工作

       一个文法符号X 的语义信息我们称之为语义属性或简称为属性(Attributes)。我们把适用于定义语义的特殊文法叫做属性文法适用于语义翻译的文法叫做属性翻译文法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值