首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java上使用DSL的第一步?

在Java上使用DSL的第一步?
EN

Stack Overflow用户
提问于 2010-07-22 12:12:19
回答 4查看 4.4K关注 0票数 5

伙计们。女孩们,我正在做一个项目,我认为可以通过实现一种特定于领域的语言来为某些类型的工作流定义一组规则和/或条件来增强该项目。

我想牢牢掌握主题、基础知识、最佳实践等,特别是如何用Java实现它们。

你有什么建议?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-22 13:10:23

首先,我推荐阅读Kernighan和Pike的“The Practice of Programming”第9章(注释)。

完成后,带着关于如何将该章中的概念映射到您想要解决的问题的特定设计的特定问题回来。

基本的模式是编写一个解释器,它被传递一个' command‘参数,可能还有一个'environment’参数,然后(在环境中)执行命令。然后你可以选择编写一个解析器,它接受一个'script‘字符串并将它转换成一个有效的'command’对象(即.外部DSL);或者您提供一个库来帮助用户使用与您使用的语言(内部DSL)相同的语言显式地构建“command”对象。

Kernighan和Pike很好地展示了解释器的微不足道和复杂程度。如果你想要更深入,我建议你读一读Daniel Friedman等人写的The Essentials of Programming Languages。每章至少构建一个不同的解释器,并演示如何实现变量、函数、作用域、对象、类、静态类型和延续等特性。

然而,我建议你首先尝试一本微不足道的DSL,否则它只是一种理论--一本书如果根据你以前的经验变得相关和实用,就会更有趣。

票数 8
EN

Stack Overflow用户

发布于 2010-07-22 12:40:22

正如其他人所评论的那样,Java确实不是创建DSL的最佳选择。Scala、Clojure、Groovy、Ruby/JRuby都是不错的选择。然而,考虑到您正在考虑使用Java,我认为Groovy或Scala似乎是最自然的选择。java开发人员的学习曲线对于这两种语言来说都是相当渐进的。以下是一些帮助您入门的链接:

票数 3
EN

Stack Overflow用户

发布于 2010-07-22 13:51:21

有一次,我使用openArchitectureware来定义和使用数字用户线。oAW是eclipse的一个插件,现在是eclipse建模框架的一部分,当然它也可以在EMF之外使用。

我喜欢它,因为它定义一个领域特定语言相当容易,oAW将自动生成一个编辑器,带有语法突出显示和错误检查的领域特定语言。

它还提供了一个模板引擎,如果您计划使用DSL编写的文档自动生成Java、XML或其他文件,该引擎将非常方便。

(我链接了旧的eclipse,因为该页面仍然提供了一些细节和到oAW项目页面的所有链接)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3305729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档