【问题标题】:Translating one DSL to another将一种 DSL 转换为另一种
【发布时间】:2020-09-26 17:48:24
【问题描述】:

我有一个特定的应用程序 DSL 查询语言,我需要将其翻译成 Cypher。
这意味着我在运行时使用我的域查询语言查询(例如 SQL)获得一个字符串,并且需要创建一个可以发送到 Neo4j 服务器的 Cypher 查询字符串。 我想知道实现这种翻译引擎的最佳选择是什么。
我已经阅读了 Xtext 并且我熟悉 Antlr,但是如果有更好的工具来完成这样的任务,我很感兴趣。
翻译不仅仅是在两种语言之间进行翻译,还需要在两种语言的数据模型之间进行翻译,这意味着我需要一个良好的基础架构来分析源语言语句。 此外,如果有一些做类似事情的开源项目,这可能是一个很好的起点。

【问题讨论】:

标签: parsing antlr dsl xtext code-translation


【解决方案1】:

我不知道你为什么提到 Xtext 和 Antlr,它们通常用于创建你不做的语言(最重要的是解析器部分)。

您想确定要执行哪种翻译,即是否从查询 DSL 构建 AST,以及是生成 Cypher AST 还是仅生成 Cypher 代码。

如果您的查询 DSL 看起来很像 Cypher,您可能可以轻松地以您选择的 Java 风格进行代码到代码的转换。

否则,您将需要从查询 DSL 构建 AST。要么您已经有一个解析器(请注意,如果您有一个用于查询 DSL 的运行时,它可能包含一个解析器),或者您必须创建它(在 ANTLR 中,甚至使用您选择的 Java 风格)。但是创建解析器需要时间。

其次,您要确定要生成的内容:Cypher AST,如果您将 Cypher 语法作为人工制品;或者更有可能是 Cypher 查询。如果您有 Cypher AST,则可以使用任何语言进行转换,但如果您需要生成 Cypher 查询,则必须使用您选择的 Java 风格或使用 Eclipse Acceleo 或 Eclipse Xtend 之类的东西编写代码生成器。

【讨论】:

  • 感谢您的回答。我添加了一些细节,以防有助于更好地理解特定场景。 @user1292456
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 2013-08-15
  • 2018-06-25
  • 1970-01-01
  • 2014-02-22
相关资源
最近更新 更多