我想要创建一个领域特定的语言作为一种增广C++语言。我主要需要两种结构:
该语言将用于科学计算目的,并最终将被翻译成普通的C++。之所以选择C++,是因为它似乎在以下两方面提供了很好的折衷:各种库的易用性、效率和可用性。
由于C++语法的复杂性,以前使用flex和bison的尝试失败了。现有的解析器在某些构造上仍然可能失败。所以我们想重新开始,但是基础更好。
你知道类似的项目吗?如果你试图这么做,你会使用什么工具?主要的陷阱是什么?你有语法方面的建议吗?
发布于 2010-05-06 09:28:36
有许多(聪明的)尝试在C++语言中使用特定于域的语言。
它通常被称为DSEL,用于特定于领域的嵌入式语言。例如,您可以查找Boost.Spirit语法或Boost.rdb (在boost保险库中)。
这些都是完全兼容的C++库,它们使用C++语法。
如果您想隐藏一些复杂性,可以添加一些宏。
我很乐意提供一些例子,如果你给我们一些工作:)
发布于 2010-05-06 09:29:08
您可以尝试扩展一个开放源代码的Elsa C++解析器(它现在是Mozilla的Pork项目的一部分):
发布于 2010-05-06 09:15:47
如果您真的想扩展C++,那么您将需要一个完整的C++解析器加上名称和类型解析。正如你所发现的,这很难。您最好的解决方案是获得一个现有的解决方案并对其进行修改。
我们的DMS软件重组工具包是实现langauge处理器的基础设施。它的目的是支持构建解析语言、执行转换和输出相同语言(带有增强代码)或不同语言/方言的工具。
DMS有一个完整的C++前端,它解析C++,构建抽象语法树和符号表(例如,所有的名称和类型解析内容)。
DMS/C++前端以源形式提供DMS,因此可以定制以实现您想要的效果。您可以将DSL定义为C++前端的扩展,然后编写转换,将特殊构造转换为“普通”C++结构,然后输出可编译的结果。
DMS/C++已用于各种转换任务,包括您所描述的涉及扩展C++的任务,以及执行大型C++应用程序大规模重组的任务。(见该网站的出版物)。
https://stackoverflow.com/questions/2779826
复制相似问题