📜  源代码编译器

📅  最后修改于: 2021-09-27 15:46:46             🧑  作者: Mango

编译器是一种软件程序,它将用高级编程语言编写的程序或代码转换为低级机器可读语言。当我们编写程序或代码时,可以使用高级语言,例如 C、C++ 或以下给出的语言。

//Simple Java program
public class simple{ 
  public static void main(String[] args){ 
    System.out.printIn("Hello World")
    }
  }

高级语言更接近英语,这让我们更容易编写程序。但是我们不能只是在计算机上运行相同的代码,因为机器无法理解这一点。计算机所能理解的只是二进制代码,即 1 和 0。因此,解决计算机无法理解高级语言的问题的方法是将其转换为机器可以理解的二进制代码。这正是编译器完成的任务。

上面那个简单的“hello world”程序的编译过程如下——

  1. 我们创建了“hello world”程序并将文件保存为Hello.Java。
  2. 当我们完成这个程序时,编译器会生成等价的机器码并将其保存到同名但类扩展名为Hello.class的类文件中
  3. 当程序被执行时,它是被执行并给出输出的类文件。

编译有多种类型,但在本文中,我们将学习一个特定的类型,即 Source to Source Compiler。

源到源编译器:
源代码到源代码编译器(S2S 编译器)也有其他三个名称,第一个是源代码到源代码的翻译器,第二个是转译器,第三个是转译器。如果我们尝试将源代码编译器的工作总结为一句话,它将如下所示:

与一般编译器的工作是将高级编程语言转换为二进制机器语言不同,源代码编译器将一种源代码从一种编程语言转换为另一种与机器编译级别相同的编程语言。语。例如,虽然传统编译器可能将C转换为汇编Jave字节码,但源代码编译器可能会将一种脚本语言转换为另一种脚本语言,例如JavascriptPython或C++Java

下面列出了一些传统编译器的例子:

Name Source Language Target Language
GCC C++ Binary / Machine Language
Clang C++ Binary / Machine Language
JAVAC Java Byte code
GCJ Jave Byte code
ECJ Java  Byte code

下面列出了一些源到源编译器的示例:

Name  Source Language Target Language
Cfront C++ C
HPHPc PHP C++
Babel ES^+(JS) ES5
ClojureScript Clojure JavaScript
JSSweet Java TypeScript
Swiftify Objective-C Swift
J2ObjC Java Objective-C
Haxe Haxe

ActionScript3, JavaScript, Java, C++,

C#, PHP, Python, Lua

Maia Maia Verilog
Cerberus X Cerberus JavaScript, Java, C++, C#

源代码到源代码编译器的主要源应用之一是将旧代码(即遗留代码)转换为编程语言或 API 的新版本,这有助于保持代码的向后兼容性。工具在更新大型和旧代码库时非常方便,否则手动完成会花费太多时间。一个例子是将旧版本的 C++ 程序转换为当前的稳定版本 C++20。或者也可能是将旧的Dart程序等 API 转换为较新的Dart 2.0 版本的情况。较新的可能的结构取决于编译器。它可以与原始代码非常相似,以简化从一种语言到另一种语言或从旧版本到新版本的开发过程。或者可以完全改变代码结构,使其看起来原始或不同。

如果我们仔细查看上表,我们可以推断出一些主要编程语言(例如PHP或 C++)的最初使用是作为源编译器的源开始的,因为它们的主要用途是转换为其他主流编程语言。今天,如果我们环顾四周,我们可以发现Dart、Typescript、CoffeeScript、Emcscript 等语言主要用于向其他语言的转换。

汇编语言翻译器:
汇编语言翻译器是源代码到源代码编译器的最重要示例之一。下面我们简要讨论了四种汇编语言翻译器。

  • 英特尔 CONV86 –
    它是最早可以将程序集转换为二进制文件的编译器之一。早在 70 年代末,它是由以制造处理器而闻名的英特尔制造的。这样做的目的是为了在英特尔的 16 位处理器上可靠地运行为 8 位处理器制作的程序。根据用户的说法,它是同类产品中的第一个,无法达到预期的效果。
  • SCP TRANS86 –
    与 Intel CONV86 类似,该转换器是由一位名叫 Tim Paterson 的工程师于 1980 年开发的,他是著名的 86-DOS 的创造者。该转换器旨在将 Intel 8080 和 Zilog Z80 的汇编代码转换为 Intel 16 位处理器 Intel 8086 的 .ASM 代码。但与之前的对应版本类似,它无法有效执行工作,需要大量手动更正。
  • 索西姆 TRANS86 –
    Socrium 是一家初创公司,在 1980 年也向市场提供了汇编翻译器。它还被发明来将汇编转换为 MS-DOS。这个翻译器被证明是前两个的更好的替代品。
  • 数字研究 XLT86 –
    该翻译器于 1981 年 9 月上市,由 Gary Kildall 开发。在此翻译器之前,没有其他人拥有提供有效性能的优化编译器方法。与 SCP TRANS86 一样,它的目标也是将 Intel 8080 的 .ASM 源代码转换为 Intel 8086 的 .A86 代码。

这四个汇编代码翻译器标志着源代码到源代码编译器的开始,现在已经取得了许多进展。