代码之家  ›  专栏  ›  技术社区  ›  PierreBdR

对特定领域语言部分解析C++

  •  6
  • PierreBdR  · 技术社区  · 16 年前

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

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

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

    5 回复  |  直到 16 年前
        1
  •  3
  •   Matthieu M.    16 年前

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

    它通常被称为 DSEL 对于 领域专用嵌入式语言 . 例如,您可以查找 Boost.Spirit Boost.rdb (在助力保险库中)。

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

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

        2
  •  2
  •   SK-logic    16 年前
        3
  •  0
  •   anon anon    16 年前

        4
  •  0
  •   Ira Baxter    9 年前

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

    我们的 DMS Software Reengineering Toolkit 是实现langauge处理器的基础设施。它是 设计用于支持工具的构造,这些工具可以解析语言、执行转换以及输出相同的语言(使用增强的代码)或不同的语言/方言。

    DMS有一个完整的 C++ Front End 解析C++,构建抽象语法树和符号表(例如,所有的名称和类型解析的东西)。

    DMS/C++前端提供了源代码的DMS,以便可以定制以达到您想要的效果。您可以将DSL定义为C++前端的扩展,然后编写将特殊构造转换为“香草”C++构造的转换,然后吐出可编译结果。

    DMS/C++已经用于各种各样的转换任务,包括那些扩展C++ C++的任务,包括对大型C++应用程序进行大规模重组的任务。(见该网站的出版物)。

        5
  •  -1
  •   Didier Trosset    16 年前

    为了解决第一个问题,也许你可以使用C++ 0x新特性“初始化器列表”和“用户定义的垃圾”来避免需要新的解析器。第二颗子弹可能也有帮助。