我熟悉ANTLR,所以有这个问题。如果我应该创建一个强大的编程语言,如java或C#,我会使用编译器工具来创建它或编写编译器的手写代码。 是否有使用编译器工具创建的广泛使用的语言的实际示例? 工具生成代码与手写编译器之间也存在性能问题。
答案 0 :(得分:1)
我相信Java编译器是用C语言编写的.Sun是一家在Unix,C和Solaris上投入很长时间的硬件公司,所以这就是他们最熟悉的。
他们可能使用了基于C的lex /解析器(如yacc)和他们的Java语法。但肯定不是ANTLR。
更新:我认为第一个javac.exe确实如此,但我不确定。下面的评论说Java编译器的当前版本确实是用Java编写的。
您可以使用ANTLR作为Java或C#等语言或您自己设计的其他语言的基础。 (我相信你可以找到ANTLR的Java语法。)
你从语法,lex开始,然后将其解析为抽象语法树(AST),然后从中发出字节代码或其他任何内容。
Terrance Parr's latest book可能会让您感兴趣。
答案 1 :(得分:0)
理论上,您可以使用任何编译器工具来启动编译器项目的某些部分,但是我相信您不能只使用已经制作的工具来制作真正强大的编程语言。实用程序直到,您开始编辑/改进它们。否则,在编译源代码和/或运行已编译的源代码时,您将面临一些性能问题。
我相信世界级的编译器应该提供的东西不仅仅是传统的二进制输出,可以通过可用的工具和实用程序生成。
另外,你不要忘记,业余编译工具的编译器可能比同一个人的手写编译器更好!然而,由专家手写的一个总是会赢! ......为什么?因为我们有“我”,但他们有“AI”!