答案 0 :(得分:0)
对于你的第一个问题,谷歌搜索就足够了。
关于第二个问题:您可以用任何语言实现DSL。您甚至可以用几乎任何语言实现eDSL。但是有些语言比其他语言要好得多。关键特性是元编程 - 以宿主语言生成代码的能力,这意味着您可以在任何地方插入eDSL的编译器。促进编译器构造的特征也是有用的 - 例如,开箱即用的解析工具,主机语言的可扩展或仅灵活的语法,用于表示AST的代数数据类型,用于简化编译器变换的模式匹配等。存在连续的可能性,一方面是完全静态和不可扩展的语言,另一方面是绝对灵活的语言。
答案 1 :(得分:0)
“域特定语言”是指一类问题(或问题的解决方案)可以简洁地表达的语言,通常是因为词汇表与问题域的词汇表一致,并且符号类似(如果可能)在该领域工作的专家所使用的。
这实际上意味着一个语法代表你可以说什么,以及一组语义来定义那些所说的东西意味着什么。这使得DSL 就其实现方式而言就像其他传统的编程语言(例如,Java)一样。事实上,您可以将这些传统语言视为“DSL”,它们擅长描述问题的过程解决方案(但不一定善于描述它们)。这意味着您需要使用与处理传统语言相同的机制来处理DSL,而这实际上是编译器机制。
Groovy有一些这样的机器(按设计),这就是它可以“支持”DSL的原因。
有关一般的DSL的讨论,请参阅Domain Specific Languages,以及一种对实现它们非常有用的特殊元编程机制。