首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为特定于域的语言部分解析C++

为特定于域的语言部分解析C++
EN

Stack Overflow用户
提问于 2010-05-06 09:07:02
回答 5查看 1.4K关注 0票数 6

我想要创建一个领域特定的语言作为一种增广C++语言。我主要需要两种结构:

  • 专用类型或声明的顶级构造
  • 代码中的构造,即添加原语使函数调用或成语更容易。

该语言将用于科学计算目的,并最终将被翻译成普通的C++。之所以选择C++,是因为它似乎在以下两方面提供了很好的折衷:各种库的易用性、效率和可用性。

由于C++语法的复杂性,以前使用flex和bison的尝试失败了。现有的解析器在某些构造上仍然可能失败。所以我们想重新开始,但是基础更好。

你知道类似的项目吗?如果你试图这么做,你会使用什么工具?主要的陷阱是什么?你有语法方面的建议吗?

EN

回答 5

Stack Overflow用户

发布于 2010-05-06 09:28:36

有许多(聪明的)尝试在C++语言中使用特定于域的语言。

它通常被称为DSEL,用于特定于领域的嵌入式语言。例如,您可以查找Boost.Spirit语法或Boost.rdb (在boost保险库中)。

这些都是完全兼容的C++库,它们使用C++语法。

如果您想隐藏一些复杂性,可以添加一些宏。

我很乐意提供一些例子,如果你给我们一些工作:)

票数 3
EN

Stack Overflow用户

发布于 2010-05-06 09:29:08

您可以尝试扩展一个开放源代码的Elsa C++解析器(它现在是Mozilla的Pork项目的一部分):

https://wiki.mozilla.org/Pork

票数 2
EN

Stack Overflow用户

发布于 2010-05-06 09:15:47

如果您真的想扩展C++,那么您将需要一个完整的C++解析器加上名称和类型解析。正如你所发现的,这很难。您最好的解决方案是获得一个现有的解决方案并对其进行修改。

我们的DMS软件重组工具包是实现langauge处理器的基础设施。它的目的是支持构建解析语言、执行转换和输出相同语言(带有增强代码)或不同语言/方言的工具。

DMS有一个完整的C++前端,它解析C++,构建抽象语法树和符号表(例如,所有的名称和类型解析内容)。

DMS/C++前端以源形式提供DMS,因此可以定制以实现您想要的效果。您可以将DSL定义为C++前端的扩展,然后编写转换,将特殊构造转换为“普通”C++结构,然后输出可编译的结果。

DMS/C++已用于各种转换任务,包括您所描述的涉及扩展C++的任务,以及执行大型C++应用程序大规模重组的任务。(见该网站的出版物)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2779826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档