Pie*_*BdR 6 c++ dsl parsing code-generation
我想创建一个域特定语言作为扩充C++语言.我将主要需要两种类型的结构:
该语言将用于科学计算目的,并最终将被翻译成普通的C++.选择C++似乎提供了一个很好的折衷方案:易用性,效率和各种库的可用性.
由于C++语法的复杂性,之前使用flex和bison的尝试失败了.现有的解析器仍然可能在某些构造上失败.所以我们想重新开始,但是要有更好的基础.
你知道类似的项目吗?如果你试图这样做,你会使用什么工具?主要陷阱是什么?你会在语法方面有什么建议吗?
如果您确实想扩展 C++,您将需要一个完整的 C++ 解析器以及名称和类型解析。正如您所发现的,这非常困难。最好的解决方案是获取现有的解决方案并对其进行修改。
我们的DMS 软件重组工具包是用于实施语言处理器的基础设施。它旨在支持构建解析语言、执行转换并吐出相同语言(带有增强代码)或不同语言/方言的工具。
DMS 有一个完整的C++ 前端,可以解析 C++、构建抽象语法树和符号表(例如,所有名称和类型解析内容)。
DMS/C++前端以源代码形式随DMS一起提供,以便可以对其进行定制以达到您想要的效果。您可以将 DSL 定义为 C++ 前端的扩展,然后编写转换,将特殊构造转换为“普通”C++ 构造,然后输出可编译的结果。
DMS/C++ 已用于各种转换任务,包括涉及如您所描述的扩展 C++ 的任务,以及对大型 C++ 应用程序进行大规模重组的任务。(参见该网站上的出版物)。