Compiler construction 大型编程语言是使用antlr、javacc等工具实现的吗

Compiler construction 大型编程语言是使用antlr、javacc等工具实现的吗,compiler-construction,Compiler Construction,我和ANTLR越来越熟了,所以有了这个问题。如果我要创建一种健壮的编程语言,比如java或C#,我会使用编译器工具来创建它还是为编译器编写手写代码。 是否有使用编译器工具创建的广泛使用的语言的实际例子? 与手写编译器相比,工具生成的代码也存在性能问题。我相信Java编译器是用C编写的。Sun是一家硬件公司,长期投资于Unix、C和Solaris,因此他们最了解这一点 他们可能使用了基于C的lex/解析器,比如yacc和他们的Java语法。但这肯定不是ANTLR 更新:我认为这对于第一个javac

我和ANTLR越来越熟了,所以有了这个问题。如果我要创建一种健壮的编程语言,比如java或C#,我会使用编译器工具来创建它还是为编译器编写手写代码。 是否有使用编译器工具创建的广泛使用的语言的实际例子?
与手写编译器相比,工具生成的代码也存在性能问题。

我相信Java编译器是用C编写的。Sun是一家硬件公司,长期投资于Unix、C和Solaris,因此他们最了解这一点

他们可能使用了基于C的lex/解析器,比如yacc和他们的Java语法。但这肯定不是ANTLR

更新:我认为这对于第一个javac.exe是正确的,但我不确定。下面的评论说,Java编译器的当前版本确实是用Java编写的

您可以使用ANTLR作为Java、C#或其他您自己设计的语言的基础。(我相信您可以找到ANTLR的Java语法。)

您可以从语法开始,将其解析为抽象语法树(AST),然后从中发出字节码或其他任何内容


您可能会感兴趣。

我相信Java编译器是用C编写的。Sun是一家硬件公司,长期投资于Unix、C和Solaris,因此他们最了解这一点

他们可能使用了基于C的lex/解析器,比如yacc和他们的Java语法。但这肯定不是ANTLR

更新:我认为这对于第一个javac.exe是正确的,但我不确定。下面的评论说,Java编译器的当前版本确实是用Java编写的

您可以使用ANTLR作为Java、C#或其他您自己设计的语言的基础。(我相信您可以找到ANTLR的Java语法。)

您可以从语法开始,将其解析为抽象语法树(AST),然后从中发出字节码或其他任何内容

可能会引起您的兴趣。

理论上,您可以使用任何编译器工具来启动编译器项目的某些部分,但是我相信,只有使用已经制作好的工具和实用程序,直到您开始编辑/改进它们,您才能制作出真正健壮的编程语言。否则,在编译源代码和/或运行编译后的源代码时,您将面临一些性能问题

我相信一个世界级的编译器应该提供比传统的二进制输出更多的东西,这些输出可以由可用的工具和实用程序生成

还有,别忘了,一个业余爱好者用编译器工具编写的编译器可能比同一个人手写的编译器要好!然而,一个由专家手写的总是会赢。。。为什么?因为我们有“我”,但他们有“AI”

理论上,您可以使用任何编译器工具来启动编译器项目的某些部分,但是我认为,只有使用已经制作好的工具和实用程序,直到您开始编辑/改进它们,您才能制作出真正健壮的编程语言。否则,在编译源代码和/或运行编译后的源代码时,您将面临一些性能问题

我相信一个世界级的编译器应该提供比传统的二进制输出更多的东西,这些输出可以由可用的工具和实用程序生成


还有,别忘了,一个业余爱好者用编译器工具编写的编译器可能比同一个人手写的编译器要好!然而,一个由专家手写的总是会赢。。。为什么?因为我们有“我”,但他们有“AI”

标准Java字节码编译器“javac”实际上是用Java实现的。默认运行时平台(VM+默认库)是用C/C++实现的。我不知道这一点。我想我认为运行时和编译器都是用C编写的。我会惊讶地发现第一个javac是用Java编写的。许多编译器都是通过某种手动或半自动翻译来编写的,而实际的编译器是为之存在的——即编译器自举。所以这个过程基本上是:在语言L中为语言L编写编译器,以M为目标。手动将编译器翻译为M(或者为语言L编写最小编译器)。使用此引导编译器编译用L编写的编译器。最后,使用刚刚生成的版本重新编译编译器。这是确保您的编译器和语言已准备好进行生产的极好方法!标准Java字节码编译器“javac”实际上是用Java实现的。默认运行时平台(VM+默认库)是用C/C++实现的。我不知道这一点。我想我认为运行时和编译器都是用C编写的。我会惊讶地发现第一个javac是用Java编写的。许多编译器都是通过某种手动或半自动翻译来编写的,而实际的编译器是为之存在的——即编译器自举。所以这个过程基本上是:在语言L中为语言L编写编译器,以M为目标。手动将编译器翻译为M(或者为语言L编写最小编译器)。使用此引导编译器编译用L编写的编译器。最后,使用刚刚生成的版本重新编译编译器。这是确保您的编译器和语言已准备好进行生产的极好方法!