通过LLVM/Clang实现c++与MyLanguage的转换

C++ to/from MyLanguage Converter via LLVM/Clang

本文关键字:MyLanguage 转换 c++ 实现 LLVM Clang 通过      更新时间:2023-10-16

我想尝试一下程序设计语言。
我想象的特性集在c++中是可行的,这意味着你可以在c++中重写"MyLang"中的任何东西。

我认为如果有一个双向转换器,从MyLang到c++,或者从c++到MyLang,那该有多好。这样我就可以避免编写编译器/优化器/链接器/虚拟机/任何东西,只是使用所有可用的c++好东西。

在我的初步搜索中,我遇到了LLVM/Clang,并认为使用其底层解析和AST生成来做我想做的事情将是一件非常容易的工作。但仔细观察后我发现,这是一个庞大的项目,启动起来并不容易。我目前在clang中的切入点是clang-modernizer,因为它看起来很漂亮,足够小并且可插入,但我认为一旦我在c++语法的任何地方中断,它就会中断。我希望保持在比LLVM IR更高的层次上,因为MyLang在高层次上与c++非常相似。

转换的一个例子是将my.cppmy.hpp文件合并为my.lang文件,此时输出文件中可能是100%有效的c++。然后重新转换my.lang文件,将定义和内联方法拆分为my.hpp文件,非内联方法再次拆分为my.cpp文件。稍后,我计划添加更多的c++语法偏差,但这可能是一个好的开始。

问题:

  1. 你知道一个项目/框架/工具包,确实提供了一个双向转换器,这是开源的,或者可能是完全可配置的,以允许我想要什么?
  2. 你认为LLVM/Clang是创建MyLanguage到c++转换器的最佳选择吗?你有好的选择吗?
  3. 任何(网络)文献可以帮助我在框架/Clang/YourAlternative的门上找到正确的位置?

问题:

  • 我知道AST是什么。
  • 我知道c++本身就是一头野兽,我现在的目标不是100%兼容c++代码。
  • 这只是研究,我不想用做任何。: -)
感谢您的宝贵时间!
请温柔点,这是我的第一个问题

你知道一个项目/框架/工具包,确实提供了一个双向转换器,这是开源的,或者可能是完全可配置的,以允许我想要什么?

我相信LLVM可以做你想做的。然而,我不能保证最终的翻译是人类可读的。

我将创建一个编译成LLVM IR的前端。通过针对c++后端(llc -march= c++ ),可以使用llvm静态编译器轻松地将IR转换为c++。

如果你只是想让你的新语言执行,没有理由把它转换成c++然后重新编译。你可以使用LLVM框架来JIT/Interpret。

如果你想要任何LLVM IR能够转换成你的语言,你可以创建一个编译器目标,来处理生成。

你认为LLVM/Clang是创建MyLanguage到c++转换器的最佳选择吗?你有好的选择吗?

我相信LLVM框架是可行的。如果您只想关注编译器前端,那么您可以这样做。您将获得框架中包含的所有后端优化和所有目标。这可以很好地确定你的关注点。

在为语言开发前端方面,您可以利用ANTLR解析器生成器。这将帮助您开发AST。此外,执行任何可以对AST进行的优化和验证。在您拥有AST之后,您可以创建一个浏览AST以生成LLVM IR的访问者。这里已经有一个c++的语法文件可以从这里开始。

任何(网络)文献,帮助我的脚在正确的位置在门的框架/Clang/YourAlternative?

编译器是令人敬畏且极其复杂的。我建议你至少带上那本紫龙之书。要开始使用LLVM,我会先阅读他们的教程。您将经历一门语言的开发过程,从前端一直到后台。