编译器的探讨
编译器,简单的讲,就是将高级的源语言等价地翻译为低级的目标语言的一个翻译器,作为计算机行业发展的支柱之一(另一是高级程序设计语言),编译器可以说是划时代的改变。
20世纪50年代,IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。第一个编译器就应运而生。那么,到底是为了满足什么需求,才产生了编译器?
这就得从计算机程序设计语言的发展来看了。最初的第一代语言-----机器语言,是十分简单而傻瓜的,其指令全部由01构成。因此,辨别和记忆它的指令内容就十分困难。为了解决这个困难,第二代语言-----汇编语言自然就产生了。相对来说,它的汇编指令更便于记忆。而第三代语言-----高级程序设计语言的产生,是为了追求更小的开销的,因为人们发现为CPU编写软件(使用汇编语言)比使用编译器所使用的开销要大得多。
其中,机器语言和汇编语言是偏向于机器的,而高级程序设计语言是偏向于人类的(因为它是用了我们更易于接受的文字)。这样就产生了两个极端,机器可识别的是机器语言,而人类抛弃繁琐追求了高级程序设计语言,这样便产生了沟通的障碍。所以编译器就是为了解决人与机器之间的沟通障碍而产生的。
一样东西的发展,必然是机遇伴随着挑战的。编译器的发展也是如此。它有来自三方面的挑战:首先,计算机程序设计语言在不断的发展以及软件系统的复杂化;然后就是,硬件技术的发展,大规模集成电路的产生和多核处理器的发明;最后,是安全性的问题。编译器的发展前景直面这三方面挑战所提出的:要适应新的语言特征和设计新的翻译算法;要提尕使用新硬件的能力,充分发挥新硬件的优势以追求更加高效的编译器;要充分考虑安全性,使得编译器更加可靠。
那么,编译器的工作原理到底是怎样的呢?
其实,一个编译器的工作过程可以分为两个阶段:前段和后端。前段是一个分析的过程,是与机器无关的操作,而后端是一个综合的过程,只与机器有关的操作。这样分为两个阶段的深意是为了方便移植和复用,以实现跨平台的操作。优胜略汰的自然法则嘛。
至于前段中的一些具体操作,诸如词法分析、语法分析、语句分析等其最终目的是生成中间代码。这一中间代码起着承上启下的作用。因为后端的操作是将中间代码转化为机器可识别的目标代码。
下面我们通过一个具体的例子加深了解一下编译器的工作原理。
这是一些高级程序设计语言的语句,经过词法分析后如下:
之后是语法分析,生成了非线性的语法树:
之后要经过语义分析这一逻辑过程以审查源程序有无语义上的错误(包含类型的错误)。无语义错误后就会生成中间代码。
中间代码产生了还不行,我们是追求完美的人,我们还要对它进行优化(这是与机器无关的优化)。
优化之后,产生了终极形态的中间代码,到这里前段的工作就已经完成了。
最后阶段就交给后端来处理了。同样的中间代码在经过代码生成器之后生成目标代码(机器可直接识别的指令代码),并经过与机器相关的优化(达到省时省空间的目的)之后生成了最终的目标代码,至此,完成了整个编译的过程。
一些材料参考了网上。
相关推荐
编译器词法分析程序实现探讨_朱朝霞.caj编译器词法分析程序实现探讨_朱朝霞.caj编译器词法分析程序实现探讨_朱朝霞.caj编译器词法分析程序实现探讨_朱朝霞.caj编译器词法分析程序实现探讨_朱朝霞.caj编译器词法分析...
C++版的编译器与编译器生成器可能会探讨如何使用这些工具来构建C++特定的编译器,包括C++的复杂特性如模板、异常处理和名称空间的处理。 在阅读"编译器与编译器生成器(C++版).pdf"这份文档时,你可能会深入学习到...
本书首先介绍编译器的结构、符号表管理、中间代码结构、运行时支持等问题,探讨过程内的控制流分析、数据流分析、依赖关系分析和别名分析的各种方法,并介绍一系列的全局优化。接下来,讲述过程间的控制流分析、数据...
下面我们将深入探讨编译器的基本概念、结构和实现过程。 一、编译器概述 编译器是一种特殊的程序,它的主要任务是将源代码(通常是高级语言如C++、Java等)翻译成目标代码(机器语言或字节码)。编译器工作的基本...
在深入探讨易语言C编译器模块之前,我们先理解一下编译器的基本概念。编译器是将高级语言(如C语言)编写的源代码转换成机器语言(二进制代码)的软件。这个过程包括词法分析、语法分析、语义分析以及代码生成等多个...
本文将深入探讨C++版本的编译器和编译器生成器的相关知识点,帮助读者理解它们的工作原理、重要性以及如何使用。 首先,让我们了解什么是编译器。编译器是一种特殊的程序,它的主要任务是将程序员用高级编程语言...
《编译器原理》一书由Torben Ægidius Mogensen撰写,旨在深入探讨编译器的工作原理,帮助读者理解并掌握编译器的设计与行为。本书不仅适用于学生,也对从事软件开发的专业人士有极大价值。 #### 编译器的概念与...
现在,让我们深入探讨编译器的相关知识点: 1. **编译器的基本结构**:编译器通常由前端和后端两部分组成。前端处理输入的源代码,进行词法分析、语法分析、语义分析,并生成中间表示(IR)。后端则将IR转换为目标...
**Arm 编译器参考指南** 是一份极其宝贵的资源,不仅为开发者提供了 ARM 编译器的全面使用指南,而且还深入探讨了其内部工作原理和技术细节。通过学习这份文档,开发者可以获得必要的知识,以便有效地利用 ARM ...
总的来说,"编译器源代码分析"是一个深度探讨编程语言理论和实践的课题,涉及了计算机科学的多个核心概念,对于软件工程师、计算机科学家和教育工作者来说,都是不可或缺的知识领域。通过学习和分析Pascal—S和C0...
《C编译器的设计与实现》是一本深入探讨编译器构建技术的书籍,主要针对C语言。在本文中,我们将详细讨论C编译器的关键组成部分、设计原理以及实现过程,以便更好地理解编译器的工作机制。 首先,C编译器是将C源...
在这个专题中,我们将深入探讨VW编译器的相关知识,包括其基本概念、安装与配置、使用方法以及常见问题解决。 1. **VW编译器的基本概念** - 编译器:编译器是将高级编程语言(如C++、Java)翻译成机器可执行的二...
本文将深入探讨Tiger编译器的Java实现,包括词法分析、语法分析、语法树构建、类型检查等核心环节,并结合提供的testcase进行具体解析。 一、词法分析 词法分析是编译器的第一步,它将源代码分解为一系列有意义的...
《C编译器剖析》PDF文档是一份深入探讨C语言编译原理和技术的资料,它为读者揭示了C编译器的工作机制,帮助开发者更好地理解编译过程中的各种概念和优化策略。这份文档通常会涵盖以下几个核心知识点: 1. **词法...
本文将基于"VC++编译器源代码"这一主题,探讨C++编译器的工作原理,特别是UnderC C++编译器的源代码,帮助开发者深入理解编译器内部的奥秘。 首先,我们需要知道C++编译器的基本工作流程,它包括词法分析、语法分析...
在本项目中,我们将探讨如何使用Java语言设计并实现一个编译器。编译器是计算机科学中的核心组件,它负责将源代码(通常是一种高级编程语言)转换为机器可执行的目标代码。以下是对实现这一过程涉及的关键知识点的...
"计算机综合实验C语言编译器设计探讨——基于LLVM架构的MIPS后端移植分析" 本篇文章探讨了计算机综合实验中C语言编译器设计的相关问题,并提出了基于LLVM架构的MIPS后端移植分析方案。该方案旨在解决传统编译原理...
本篇文章将深入探讨opcode、汇编编译器以及它们在计算机体系结构中的作用。 首先,让我们理解什么是opcode。Opcode是“操作码”的缩写,它是机器码的一部分,指示处理器执行特定操作。在计算机硬件中,每种基本操作...