将一个DSL转换为另一个DSL

问题描述 投票:0回答:1

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

parsing antlr dsl xtext code-translation
1个回答
0
投票

我不确定为什么要提到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之类的代码编写代码生成器。

© www.soinside.com 2019 - 2024. All rights reserved.