在Java上使用DSL的第一步?

Jos*_*iaz 5 java language-design

伙计们......女孩们,我正在研究一个项目,我认为可以通过实施领域特定语言来为某些类型的工作流程定义一套规则和/或条件来加强这个项目.

我希望能够牢牢掌握主题,基础知识,最佳实践等,特别是如何使用Java以某种方式实现它们.

你有什么建议?

Rec*_*rse 8

首先,我建议阅读Kernighan和Pike 的"编程实践"第9章(符号).

完成后,请回到此处,了解如何将该章中的概念映射到您想要解决的问题的特定设计.

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

Kernighan和Pike很好地展示了解释器的复杂程度和复杂程度.如果你想要更深入,那么我建议阅读丹尼尔弗里德曼等人的"编程语言要点".每章至少构建一个不同的解释器,并演示如何实现变量,函数,作用域,对象,类,静态类型和延续等功能.

但是我建议你首先尝试一下这个简单的DSL,否则它只是理论 - 当你通过以前的经验使它变得相关和实用时,一本书会更有趣.