Compiler construction 将我自己的编程语言翻译成另一种语言并编译它是一种好的实践吗?

Compiler construction 将我自己的编程语言翻译成另一种语言并编译它是一种好的实践吗?,compiler-construction,antlr4,transpiler,Compiler Construction,Antlr4,Transpiler,我已经准备好语法,并在Antlr4中进行了测试 实际上,我想让我的语言源文件变得足够快和可执行 因此,我认为我有以下解决方案: LLVM 虚拟机 生成另一种语言的源代码,然后编译生成的文件 我的问题是关于解决方案3 你的意见是什么? 这是个坏习惯吗? 挑战是什么?还有缺点? 这里有什么提示或建议吗?关于目标语言、优化、任何要阅读的源代码等 感谢为了尽快获得最低可行的产品(原型,0.01版),我会做第三件事。例如,我在某个地方读到,创建一个好的编译器最困难的部分是返回好的错误消息,并针对预期的CP

我已经准备好语法,并在Antlr4中进行了测试 实际上,我想让我的语言源文件变得足够快和可执行 因此,我认为我有以下解决方案:

  • LLVM
  • 虚拟机
  • 生成另一种语言的源代码,然后编译生成的文件
  • 我的问题是关于解决方案3

    你的意见是什么? 这是个坏习惯吗? 挑战是什么?还有缺点? 这里有什么提示或建议吗?关于目标语言、优化、任何要阅读的源代码等


    感谢

    为了尽快获得最低可行的产品(原型,0.01版),我会做第三件事。例如,我在某个地方读到,创建一个好的编译器最困难的部分是返回好的错误消息,并针对预期的CPU或VM进行优化。如果你选择了第三种选择,你可以免费得到(一些)优化。如果编译器证明值得改进,那么LLVM和/或JVM和/或直接编译为二进制/汇编。如果你有世界上所有的时间。我想,什么是最好的还取决于你所创造的语言类型。首先,我要检查一下你是否有其他语言中没有的独特和有用的东西。如果没有,那么在已经很长的列表中添加另一种语言有什么意义呢?

    使用另一种基于文本的语言作为语言后端的一个巨大缺点是会丢失精确的调试信息—变量、位置等

    如果您使用的是一种具有丰富元数据的语言,比如LLVM IR(是的,它的级别并不比C低太多),那么您可以插入所有需要的调试信息。以LLVM为目标几乎和以C为目标一样容易


    另一种选择是,如果您想从非常高级的语言功能中获益,并在上面构建新语言,则使用可扩展语言作为基础-例如。,将您的语言作为Racket或Common Lisp之上的语法扩展来实现。

    我的语言的主要目标是可读性,同时更易于编写,还有一些其他附加功能也有助于实现主要目标,在类型上几乎是独一无二的,至少我从未见过这样的情况,而且对许多计算机用户群体和开发人员都很有用,“如果您选择第三种方案,您可以免费获得(一些)优化。”这三种方案都可以实现。@sepp2k那么您认为第三种方案是否有好处?C是编译器的理想目标。有关以C作为目标之一的语言和编译器,请参见此:4。编写自己的后端。把所有东西都放在内部有它的好处。如果只是因为1。二,。在你的项目中经常是一个独立版本的数量感兴趣的Marco事实上我同意你的观点,但问题是我不熟悉llvm,无法理解它…我将继续努力,但首先我想也许最好针对另一种我知道的语言,至少能够进行演示it@NavidDezashibi暂时快速实现类似于Racket的东西可能是最简单的方法。编译到C甚至C++也是很容易的,只要你不关心精确的调试信息(你可以用一些),我会在这里查看更多的细节: