编译器的输出代码类型

时间:2010-10-15 04:45:23

标签: api compiler-construction operating-system

当编译器将高级语言编译成可执行的目标语言时,目标语言是什么形式的?

它是机器代码之类的低级语言吗?或者编译器只是从操作系统的API将其转换为操作系统的功能,操作系统可以完成所有工作吗?

2 个答案:

答案 0 :(得分:2)

编译器可以有许多不同的输出:

  1. 直接在计算机上运行的机器代码
  2. 即时转换为机器代码的中间代码,
  3. 汇编程序的源代码
  4. 选项2的优点是它允许输出可移植到不同的计算机,只要您有可用于目标机器的本机机器代码转换器的适当中间代码即可。这就是Java能够“一次编写,随处运行”的方式。

答案 1 :(得分:1)

编译器是将程序从一种表示转换为另一种表示的任何程序。该目标表示可以是任何,只要它至少与源表示一样具有计算功能。特别是,这意味着如果源表示是图灵完备的,那么目标表示也必须是图灵完备的。

编译器可以从高级语言编译为另一种高级语言(例如,GWT,将Java编译为ECMAScript),从高级语言到低级语言(例如Gambit,编译Scheme到C),从高级语言到机器代码(例如GCJ,编译Java到本机代码),从低级语言到高级语言(例如Clue,将C编译为Java,Lua,Perl, ECMAScript和Common Lisp,从低级语言到另一种低级语言(例如Android SDK,它将JVML字节码编译为Dalvik字节码),从低级语言到机器代码(例如C1X编译器,它是一部分) HotSpot,它将JVML字节码编译为机器代码),机器代码为高级语言(任何所谓的“反编译器”),机器代码为低级语言(例如JPC中的JIT编译器,编译x86本机代码)到JVML字节码)和本机代码到本机代码(例如PearPC中的JIT编译器,它将PowerPC本机代码编译为x8 6本机代码)。