难道 DSL 不能像 API 一样简单,因此不需要解析器吗?或者我误解了领域特定语言的真正含义?我认为它指的是解决特定领域问题的任何有组织的规则集。API 似乎符合这个定义,对吗?

有帮助吗?

解决方案

您可以更一般的编程语言中嵌入一个DSL。这通常是一个很好的解决方案。 (可以说,这需要DSL特定的API的形式。)

您也可以创建一个单独的语言,用它自己的解释,代表你的域的概念。这往往是一个较大的任务,并且通常不是必要的。

其他提示

你混淆与执行理念。领域特定语言是被认为“接近”问题域,而不是为解决问题一般性的描述一般语言中的想法的任何表示。

是,一个DSL可能被实现为API,它提供的是,在问题域称为特定概念的功能,但是,当为一个文本文件表示的DSL是同样有效。

程序员修炼:从中级到主的包含DSL的一个很好的说明,以及他们是有用的,以实例的情况。强烈推荐。

您将仍然只有主机语言的语义。

例如为:在命令式语言功能的编程不工作。所以,你有一个功能DSL加入到这一命令式语言...

是的,绝对 - 仅仅 如果宿主语言有足够的灵活性来支持 API,那么 API 将能够很好地作为 DSL。

Ruby 是一种非常适合这种情况的语言,特别是考虑到可选的括号和其他灵活性。

  • Rails通常称为编写数据库驱动Web应用程序的DSL。

  • Rake是一个构建系统,具有DSL供书写(更智能)的制作件。

我自己的 OO文件 是一个您可以将其视为用 C++ 编写数据库应用程序的 DSL 的框架 - 它受到 dBase 的启发,并大量使用了 C++ 运算符重载、本地对象和流习惯用法。

Forth 是一种经典的语言,它模糊了 DSL 和 API 之间的界限,因为 Forth 程序仅由一系列空格分隔的单词组成。Forth DSL 最令人印象深刻的例子可能是 丰富 - Abundance 是一种基于 Forth 的商业编程语言,用 BBL Forth 编写。BBL 是一个 32 位 DOS FORTH 编译器。按原样分发。请参阅警告。这不适合胆小的人。它主要对那些为第三世界开发软件的人感兴趣,在第三世界,你需要在旧的 klunker XT 和 AT 计算机上快速执行。您可以用它编写一些非常复杂的数据输入程序,这些程序将围绕现代数据输入程序运行。

当然,图形DSL将不需要解析的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top