Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的Java编译器_Java_Javac - Fatal编程技术网

Java中的Java编译器

Java中的Java编译器,java,javac,Java,Javac,可能重复: 我在阅读有关Java编译器的文章时意识到它是用Java编写的。这怎么可能呢 我是说,这不是“鸡和蛋”的问题吗? 我们如何用同一种语言编写编译器?您要解决的问题实际上是任何编译器的问题。例如,许多编译器都是用C编写的。那么,如何在没有C编译器的情况下编译C编译器呢 您正在寻找的过程称为。来自维基百科(有关更多信息和其他文章的链接,请参阅文章): 自举是一个术语,用于 用计算机科学来描述 写作技巧 目标中的编译器(或汇编程序) 它是什么样的编程语言 打算编译。应用这个 技术导致了自托管

可能重复:

我在阅读有关Java编译器的文章时意识到它是用Java编写的。这怎么可能呢

我是说,这不是“鸡和蛋”的问题吗?
我们如何用同一种语言编写编译器?

您要解决的问题实际上是任何编译器的问题。例如,许多编译器都是用C编写的。那么,如何在没有C编译器的情况下编译C编译器呢

您正在寻找的过程称为。来自维基百科(有关更多信息和其他文章的链接,请参阅文章):

自举是一个术语,用于 用计算机科学来描述 写作技巧 目标中的编译器(或汇编程序) 它是什么样的编程语言 打算编译。应用这个 技术导致了自托管 编译器

大部分编程语言都是自举的,包括 BASIC,C,Pascal,Factor,Haskell, Modula-2,Oberon,OCaml,通用Lisp, Scheme、Python等


本文还讨论了您指出的问题。我可以在这里全部引用,但希望这能让你开始理解它。好问题

一旦您在编程语言中获得了足够的工具,您就可以编写自己的编译器,只需将编译器视为一个接受“特定格式”输入并写出“特定格式”输出的程序

换句话说,编译器的实现语言和编译语言之间没有依赖关系。通过无依赖性,这包括不需要相同,也不需要不同


原始编译器显然不是用Java编写的。它是用C写的;但是,如果您真的想避开引导技术,可以使用强大的文档,只需使用十六进制编辑器编写“编译代码”。虽然可以绕过引导,但建议使用引导,因为在十六进制编辑器中编写目标代码需要花费大量时间,而且容易出错。

是用C编写的。然后可以用Java编写下一个版本。:)

通过自举。请参阅(投票决定将其作为副本关闭)。请看::@Favonius