天天看点

编译技术笔记01---编译器介绍

文章目录

      • 编译器结构
      • 编译器和解释器的区别
      • 编译器研究热点
      • 图片笔记
      • 即时编译(JIT)
      • 习题

编译器结构

编译技术笔记01---编译器介绍

预 处 理 器 : \color{#0AAD1A}{预处理器:} 预处理器:一个源程序可能被分成多个模块并存放于不同的文件中,一个叫预处理器(preprocessor)的程序可以把源程序聚合在一起,预处理器还负责把那些称为宏的所写形式转换为源语言的语句。然后,将经过预处理的源程序作为输人传递给一个编译器。

汇 编 器 : \color{#0AAD1A}{汇编器:} 汇编器:编译器可能产生一个汇编语言程序作为其输出,因为汇编语言比较容易输出和调试。接着,这个汇编语言程序由称为汇编器(assembler)的程序进行处理,并生成可重定位的机器代码。(可重定位是指变量等在内存中的位置是不固定的,后面的加载器修改这些地址)

链 接 器 / 加 载 器 : \color{#0AAD1A}{链接器/加载器:} 链接器/加载器:可重定位的机器代码经常和其他可重定位的目标文件以及库文件连接到一起,形成真正在机器上运行的代码。一个文件中的代码可能指向另一个文件中的位置,而链接器(linker)能够解决外部内存地址的问题。(外部内存地址是指: 一个文件可能会引用另一个文件的数据对象或过程,这对于这个文件来说,是外部内存地址)最后加载器( loader)把所有的可执行目标文件放到内存中执行。

一个三地址指令唯一确定了一个运算完成的顺序

除了z=x op y这种指令外,其他指令基本上只有一个操作符,即只能完成一个动作。

编译器和解释器的区别

解释器是一条一条的解释执行源语言。编译器是把源代码整个编译成目标代码,执行时不在需要编译器,直接在支持目标代码的平台上运行,因此,在把用户输入映射成为输出的过程中,由一个编译器产生的机器语言目标程序通常比一个解释器快很多。然而,解释器的错误诊断效果通常比编译器更好,因为它逐个语句地执行源程序。

解释器是动态翻译,编译器是静态翻译

解释器没有代码优化的环节

更多区别(解释器:词法分析–>语法分析–>语义分析–>执行)

编译器研究热点

并行编译:

并行化编译面临的任务是:给定一个在单处理机上运行较长的串行程序和一台具有多个处理器可同时工作的并行计算机,目的是将串行程序分解成若干个能并行执行或至少能重叠执行的代码段,使其在并行机上能较快地运行。所以并行编译器主要工作就是寻找代码的并行性,然后将其调度在并行机上高速正确地执行。(参考:并行编译器)

中间代码:

在编译器的分析-综合模型中,前端对源程序进行分析并产生中间表示,后端在此基础上生成目标代码。理想情况下,和源语言相关的细节在前端分析中处理,而关于目标机器的细节则在后端处理。和中间代码相关的内容包括中间代码表示、静态类型检查和中间代码生成(参考:中间代码)

代码优化

所谓代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同。优化的含义是最终生成的目标代码短(运行时间更短、占用空间更小),时空效率优化。原则上,优化可以在编译的各个阶段进行,但最主要的一类是对中间代码进行优化,这类优化不依赖于具体的计算机。(参考:代码优化)

图片笔记

参考:哈工大编译原理(慕课)

编译技术笔记01---编译器介绍
编译技术笔记01---编译器介绍
编译技术笔记01---编译器介绍
编译技术笔记01---编译器介绍

设置字符串表是因为符号表里NAME字段有大小限制,标识符的属性信息有可能会超过这个限制,所以要建立字符串表

即时编译(JIT)

JIT是一种提高程序运行效率的方法。

具体提高方法看下面的图和超链接

比如java的字节码(class文件里面),当字节码被加载到虚拟机之后,它会被解释器运行一段时间,当发现某些情况,比如有些代码被频繁执行,这时就会将这些代码转换成机械码,提高运行效率(本地的机械码执行效率更高)
编译技术笔记01---编译器介绍

(图片参考下面的链接)

即时编译

习题

通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括(C)。

A.模拟执行器

B.解释器

C.表格处理和出错处理

D.符号执行器

将编译程序分成若干个“遍”是为了(B) 。

A.提高程序的执行效率

B.使程序的结构更加清晰

C.利用有限的机器内存并提高机器的执行效率

D.利用有限的机器内存但降低了机器的执行效率

编译技术笔记01---编译器介绍

(参考:https://www.nowcoder.com/questionTerminal/f2b1c628ef514f80b486bf1da4595ba9?toCommentId=715634)

继续阅读