通过LLVM/Clang实现c++与MyLanguage的转换
C++ to/from MyLanguage Converter via LLVM/Clang
我想尝试一下程序设计语言。
我想象的特性集在c++中是可行的,这意味着你可以在c++中重写"MyLang"中的任何东西。
我认为如果有一个双向转换器,从MyLang到c++,或者从c++到MyLang,那该有多好。这样我就可以避免编写编译器/优化器/链接器/虚拟机/任何东西,只是使用所有可用的c++好东西。
在我的初步搜索中,我遇到了LLVM/Clang,并认为使用其底层解析和AST生成来做我想做的事情将是一件非常容易的工作。但仔细观察后我发现,这是一个庞大的项目,启动起来并不容易。我目前在clang中的切入点是clang-modernizer,因为它看起来很漂亮,足够小并且可插入,但我认为一旦我在c++语法的任何地方中断,它就会中断。我希望保持在比LLVM IR更高的层次上,因为MyLang在高层次上与c++非常相似。
转换的一个例子是将my.cpp
和my.hpp
文件合并为my.lang
文件,此时输出文件中可能是100%有效的c++。然后重新转换my.lang
文件,将定义和内联方法拆分为my.hpp
文件,非内联方法再次拆分为my.cpp
文件。稍后,我计划添加更多的c++语法偏差,但这可能是一个好的开始。
问题:
- 你知道一个项目/框架/工具包,确实提供了一个双向转换器,这是开源的,或者可能是完全可配置的,以允许我想要什么? 你认为LLVM/Clang是创建MyLanguage到c++转换器的最佳选择吗?你有好的选择吗?
- 任何(网络)文献可以帮助我在框架/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,我会先阅读他们的教程。您将经历一门语言的开发过程,从前端一直到后台。
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 通过LLVM/Clang实现c++与MyLanguage的转换