我们正在考虑使用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。
答案 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的表达式和语句,但不支持其他方式。