什么是“特定领域语言”?

时间:2011-10-20 08:50:20

标签: dsl

  

可能重复:
  What is a DSL and where should I use it?

我听说这个词用得很多......对于 “特定领域”的语言究竟意味着什么?

此外,对于某种语言(例如Groovy支持特定于域的语言,这意味着什么?

2 个答案:

答案 0 :(得分:0)

对于你的第一个问题,谷歌搜索就足够了。

关于第二个问题:您可以用任何语言实现DSL。您甚至可以用几乎任何语言实现eDSL。但是有些语言比其他语言要好得多。关键特性是元编程 - 以宿主语言生成代码的能力,这意味着您可以在任何地方插入eDSL的编译器。促进编译器构造的特征也是有用的 - 例如,开箱即用的解析工具,主机语言的可扩展或仅灵活的语法,用于表示AST的代数数据类型,用于简化编译器变换的模式匹配等。存在连续的可能性,一方面是完全静态和不可扩展的语言,另一方面是绝对灵活的语言。

答案 1 :(得分:0)

“域特定语言”是指一类问题(或问题的解决方案)可以简洁地表达的语言,通常是因为词汇表与问题域的词汇表一致,并且符号类似(如果可能)在该领域工作的专家所使用的。

这实际上意味着一个语法代表你可以说什么,以及一组语义来定义那些所说的东西意味着什么。这使得DSL 就其实现方式而言就像其他传统的编程语言(例如,Java)一样。事实上,您可以将这些传统语言视为“DSL”,它们擅长描述问题的过程解决方案(但不一定善于描述它们)。这意味着您需要使用与处理传统语言相同的机制来处理DSL,而这实际上是编译器机制。

Groovy有一些这样的机器(按设计),这就是它可以“支持”DSL的原因。

有关一般的DSL的讨论,请参阅Domain Specific Languages,以及一种对实现它们非常有用的特殊元编程机制。