C++ C++;通过LLVM/Clang与MyLanguage转换器之间的通信

C++ C++;通过LLVM/Clang与MyLanguage转换器之间的通信,c++,programming-languages,clang,converter,llvm,C++,Programming Languages,Clang,Converter,Llvm,我想尝试编程语言设计。 我想象的特性集在C++中是可行的,意思是你可以在C++中改写“MyLangy”的任何东西。 我认为用双向转换器是很好的,从MyLang到C++,反过来也一样。这样我就可以避免编写编译器/优化器/链接器/虚拟机/任何东西,只使用C++中可用的所有好的东西。 在我的初步搜索中,我遇到了LLVM/Clang,并认为使用它的底层解析和AST生成来做我想做的事情会非常容易。但仔细观察后我发现,这是一个庞大的项目,在这个项目中,开始并不是一件容易的事情。我现在的CLAN输入点是CLA

我想尝试编程语言设计。
我想象的特性集在C++中是可行的,意思是你可以在C++中改写“MyLangy”的任何东西。 我认为用双向转换器是很好的,从MyLang到C++,反过来也一样。这样我就可以避免编写编译器/优化器/链接器/虚拟机/任何东西,只使用C++中可用的所有好的东西。 在我的初步搜索中,我遇到了LLVM/Clang,并认为使用它的底层解析和AST生成来做我想做的事情会非常容易。但仔细观察后我发现,这是一个庞大的项目,在这个项目中,开始并不是一件容易的事情。我现在的CLAN输入点是CLAN的现代化,因为它看起来不错,足够小,可以插入,但是我想它会在我用C++语法中断任何地方时中断。 我想保持比LLVM IR更高的水平,因为MyLang在高水平上与C++非常相似。

一个转换的例子是一个代码,它使用一个<代码>我的.CPP < /C>和一个代码>我的.HPP< /Cux>文件,并将它合并成一个<代码>我的.Lang/Cux>文件,此时它可能在输出文件中被赋予100%个有效C++。随后应重新转换

my.lang
文件,将定义和内联方法拆分为
my.hpp
文件,将非内联方法拆分为
my.cpp
。稍后我计划从C++语法中添加更多的偏差,但这可能是一个好的开始。 问题是:

  • 您是否知道有一个项目/框架/工具包确实提供了一个双向转换器,它是开源的,或者可以完全配置为允许我想要的东西
  • 你认为LLVM/CLAN是创建M+语言到C++转换器的最佳选择吗?你有好的选择吗
  • 有没有(网络)文献可以帮助我找到框架/叮当声/你的选择的正确位置
  • 问题不是:

    • 我知道AST是什么
    • 我知道C++是一个野兽本身,我现在并不是真正瞄准100% C++代码兼容。
    • 这只是研究,我不想做任何事情
    谢谢你抽出时间

    请温和一点,这是我在这里的第一个问题。

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

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

    我将创建一个编译为LLVM IR的前端。通过对C++后端的目标(IR),可以很容易地将LIR转换为C++,并以C++后端为目标(<强> LLC-Mauni+C++<强> >)。 <>如果你只想让你的新语言执行,没有理由把它转换成C++,然后重新编译它。您可以利用LLVM框架进行JIT/解释

    如果希望任何LLVM IR能够转换为您的语言,可以创建一个编译器目标,用于处理生成

    <>强>你认为LLVM/CLAN是创建M+语言到C++转换器的最佳选择吗?你有好的选择吗?

    我相信LLVM框架是未来的发展方向。如果您只想关注编译器前端,那么就可以这样做。您将获得框架中包含的所有后端优化和所有目标。这是很好的范围你的重点

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

    是否有任何(网络)文献可以帮助我找到框架/叮当声/你的选择?


    编译器非常棒而且非常复杂。我建议你至少要有这个。要继续LLVM,我会通过他们的。你要通过一种语言的发展,从前端到JIT。

    ……你想要一些神奇的语言(即使是未定义的语言),并把它转换成C++语言。我的意思是,如果有这样一个工具,我想它会花费数百万美元。每次我尝试使用转换器(C to Matlab,Matlab to C,C++到C,C,verilog),它们都是地狱般的,每个都有来自不同开发者的付费软件,他们对任务非常熟悉……真的没有代码的“Roeeta T结石”。