2011-10-20 41 views
4

可能重复:
What is a DSL and where should I use it?什么是“域特定语言”?

我听说过这个词用了不少......到底是什么意思的语言“特定领域”?

此外,语言(例如Groovy)到支持域特定语言是什么意思?

+0

https://secure.wikimedia.org/wikipedia/en/wiki/Domain-specific_language –

+0

@FelixKling:实际上我已经阅读过这篇文章,但并没有太大帮助。例如,一个任意语言如何“支持(任意的?)域特定的语言”?它与元编程有关吗?我猜这个术语本身的定义可能是有道理的,但是这个用法让我很困惑...... – Mehrdad

回答

0

关于第一个问题一点谷歌搜索就足够了。

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

0

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

这是什么真正的意思是代表你能说什么语法和语义集,它定义了那些说事的意思。这使得DSL的只是就像它们是如何实现的条件等传统编程汉语语言(如Java的)。而事实上,你可以认为这些常规的语言为“DSL” S是擅长描述(在描述他们,但不是必需的好)程序解决问题的办法。其含义是,您需要使用相同的机器来处理DSL,就像处理传统语言一样,这本质上就是编译器机器。

Groovy有一些这样的机器(通过设计),这就是为什么它可以“支持”DSL。

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