可以将xtext用作Java中的表达式语言吗?

时间:2013-11-26 05:14:44

标签: java dsl xtext

我们正在考虑使用xtext开发可用于简化某些复杂逻辑和查询操作的DSL,但希望在Java类中就地使用它。可以这样做吗?

我们想要的是用它来开发几乎像LINQ的东西,但可以在Java中使用。我在xtext上看到的所有例子都是从DSL生成.java类,这很棒,但不完全是我们想要的。

所以,比如:

List<ICreature> dragons = dataEngine.parse(get Monster where Type = Dragon and HitPoints > 1000);

我相信如果查询是在一个单独的查询文件中预先编写的,然后通过xtext生成器编译成可以传递给我们的数据管理层的表单,可以执行此操作。我们想要比这更灵活的东西。

xText看起来很有前途,但似乎我们最终会使用jOOQ或类似的东西而不是真正的DSL。

2 个答案:

答案 0 :(得分:1)

  

但似乎我们最终会使用jOOQ或类似的东西而不是真正的DSL。

jOOQ 是真正的DSL :-)真实internal domain specific language,而不是external DSL。事实上,我最近一直在研究Xtend / Xtext,看看jOOQ本身是否可以通过定义实际语法来增强它,使其看起来不像Java,更像是SQL。解析SQL语句并将它们转换为jOOQ调用。

这似乎可以通过名为Xbase的技术实现,该技术由前面提到的Xtend和Xtext创建。事实上,Xtend语言基于Xbase。根据他们的文档,这将允许您将自己的语法集成到几乎看起来像Java的东西中,从而定义Java和您自己的DSL之间的交互模式。

到目前为止,我没有成功理解他们的文档,但也许你可以得到一些帮助on their forum

答案 1 :(得分:1)

不,遗憾的是,Eclipse的Java编辑器和java解析器和编译器都不允许挂钩,这样就可以实现。使用Xbase,您可以在DSL中嵌入类似Java的表达式和语句,但不支持其他方式。