欢迎来到天天文库
浏览记录
ID:51105390
大小:496.50 KB
页数:103页
时间:2020-03-18
《编译原理与技术讲义-第9章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理与技术第9章语法制导的中间代码翻译青岛大学信息工程学院主要内容中间语言声明语句的翻译赋值语句的翻译基本控制结构的翻译转向语句的翻译编译原理与技术29.1语法制导的中间代码翻译引论中间代码翻译在编译程序中的位置使用中间代码的好处包括:(1)把源程序翻译成目标代码的工作分阶段进行,便于控制和管理开发工作的复杂度,集中地解决不同阶段的不同问题。例如,语义检查可以发现类型不匹配、缺乏类型等可能导致程序运行得错误。(2)÷便于把与机器特性密切相关的目标代码的生成尽可能的限制在编译的后端,有利于重定目标机器,使得一种中间代码可以为多种不同类型的目标机器服务。这
2、是目前最流行的编程语言Java以及.NET编程环境所采用的策略(当然,除了中间表示以外,它们的运行系统还需要虚拟机VM或通用语言运行时CLR等技术)。语义分析器中间代码生成器代码优化器语法树中间代码语法树中间代码目标代码生成器编译原理与技术39.1中间语言在编译过程中表示源程序的数据结构统称为中间表示(中间语言)。用中间语言表示的程序叫做中间代码。中间语言的设计既要包含足够的结构,可以支持高级程序语言的结构,如类型、模块、接口、安全机制、垃圾搜集等,又要便于到目标机器的的自动映射,有助于翻译成时空方面都高效的运行代码。编译原理与技术49.1中间语言
3、中间语言可以按照下列特性分类:抽象程度中间语言可以非常抽象,像语法树一样抽象地表示几乎所有的操作,也可以具体到接近于目标机器及其指令。抽象的中间语言如分析树、有向无环图,底层的中间语言包括字节代码,它们的语句集合类似于汇编语言或机器的符号指令,而三地址码介于这两类表示之间。现代计算机体系结构(存储管理、寄存器、指令)的发展对中间代码的设计产生了深刻的影响。例如,P-code和Javabytecode都属于字节代码,但是,它们的代码本身与支持环境存在很大的差异。运行时信息中间语言可能使用目标机器和运行环境的详细信息(如数据类型、变量的位置),也可以不使用这些
4、信息。抽象程度高的语言一般不包含目标机器的信息,而字节代码和三地址码通常都包含了数据类型以及相关的算符。一般的字节码如P-code和Javabytecode都有相应特殊的虚拟机器来解释并运行字节代码。现代计算机技术的发展对程序的安全性、互操作性、并发性等严格要求,使得运行环境更加复杂。编译原理与技术59.1中间语言使用编译的数据结构中间语言可以包含符号表的全部信息,例如符号范围、嵌套层次和变量的偏移,目标代码的产生就可以完全倚赖于这样的中间代码。否则,产生目标代码时就需要查询符号表等数据结构。语法树、分析树和有向无环图通常需要符号表的信息才能完成分析和翻译
5、的工作,三地址码也需要使用符号表,一般的字节码已经把这些信息转换成对应虚拟机的信息。互联、开放、异构等特性增加了编译系统数据结构与管理的复杂性,例如,统一的命名空间,除了要包含一个程序的名字以外,还要处理甚至是用其它语言编写的构件中的各种名字。用途编译过程包含了不同的阶段和任务,每个阶段和任务都有最合适的中间表示:分析树特别适合对源程序进行语法和语义分析,有向无环图适合代码优化和生成,后缀表示便于计算机的计算,字节码和三地址码由于更接近机器代码而最适宜目标码的生成和移植。但是,一个编译程序通常都不会使用太多的中间表示,以免各个中间表示之间的转换造成的效率损
6、失。编译原理与技术69.1中间语言-后缀式后缀式定义9.1后缀式的递归定义如下:(1)如果E是一个变量或常量,则E的后缀式就是E本身;(2)如果E是形如E1opE2的表达式,其中op是任意的二元运算符,那么,E的后缀式为E1’E2’op,其中E1’和E2’分别是E1和E2的后缀式;(3)如果E是(E1)形式的表达式,那么,E1的后缀式就是E的后缀式。上述定义容易扩充到含单目算符如负号“”或否“not”的表达式,也不难扩充到包含数组元素。编译原理与技术79.1中间语言-后缀式后缀式的例子(a+b)(a+c)的后缀式为ab+ac+a+b+c/d(a+
7、c)的后缀式为abcd/ac+++notAornot(CandnotB)的后缀式为AnotCBnotandnotor对于数组变量,把[]和分割维数的逗号“,”都看作是二目算符,那么a[i]的后缀式可以表示成为ai[]a[i,j,k]的后缀式为aijk,,[]编译原理与技术89.1中间语言-后缀式后缀式的两个特点(1)后缀式形式的表达式计算顺序唯一,无需使用括号来明确计算顺序;(2)只要直到每个算符的目数,计算参与运算数的个数,对于后缀式不论从左还是从右进行扫描,都能对它进行唯一的分解。例如abc/所代表的中缀表达式是a/(bc)ab+cd+所
8、代表的中缀表达式是(a+b)(c+d)后缀式特别适合利用栈的结构
此文档下载收益归作者所有