Java编译器在Java中的实现方式是什么?

4

可能是重复问题:
在“自身”中实现编译器

我正在阅读有关Java编译器的内容,并意识到它是用Java编写的。这怎么可能呢?

我的意思是,这不是像“鸡和蛋”的问题吗? 我们如何使用相同的语言编写编译器?


1
通过引导程序。例如,参见在“自身”中实现编译器(已投票将其关闭为重复内容)。 - user395760
3个回答

3

原始版本是用C语言编写的。然后你可以用Java编写下一个版本。 :)


看一下这个:http://jikesrvm.org/ :) - Favonius
@Favonius http://jikes.sourceforge.net/ - Bax

1
你正在解决的问题实际上是任何编译器都会遇到的问题。例如,许多编译器都是用C语言编写的。那么...如果没有C编译器,如何编译C编译器等等。
你要找的过程称为引导。来自维基百科(请参阅文章以获取更多信息和链接到其他文章):

引导是计算机科学中用于描述编写目标编程语言中的编译器(或汇编器)的技术。应用此技术会导致一个自举编译器。

大部分编程语言都是通过引导来实现的,包括BASIC、C、Pascal、Factor、Haskell、Modula-2、Oberon、OCaml、Common Lisp、Scheme、Python等。

该文章还涉及到了你提出的鸡和蛋问题。我可以在这里引用它的全部内容,但是希望这能帮助你开始理解它。好问题!

0

一旦你在编程语言中获得足够的工具,那么你可以将它作为一个程序来对待,编写自己的编译器。编译器会接收一定格式的输入,并输出一定格式的结果。

换句话说,编译器的实现语言和它所编译的语言之间没有依赖关系。无依赖意味着不必要求两者相同,也不必要求两者不同。

原始的编译器显然不是用Java编写的,而是用C编写的。然而,如果你真的想绕过引导技术,只需使用十六进制编辑器编写“已编译代码”,并提供详细的文档。虽然绕过引导技术是可行的,但建议使用引导技术,因为在十六进制编辑器中编写目标代码非常耗时且容易出错。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接