跳过正文

DSL Domain Specific language

·69 字·1 分钟
jiladahe1997
作者
jiladahe1997
To see the world as it is, and to love it

背景
#

DSL 中文名 领域特定(编程)语言。 指的是在计算机编程领域,和一般的“通用编程语言”,例如C语言、C++、java、python等形成对比。

领域特定语言是一种具有更高抽象级别的编程语言,针对特定类别的问题进行了优化。DSL 使用来自领域或领域的概念和规则。

举个例子,GNU make的makefile语法就是一种DSL;再比如,xml也算一种DSL。 DSL是一种泛指。


用处
#

DSL本身只是一种概念。 当我们使用某个工具,例如 makefile 的时候,为了描述方便,我们可以直接说makefile使用DSL ; 再比如,android的构建系统 soony,也是使用dsl。 那么你应该懂了。



原理
#

听了上述背景,你会发现DSL实际就是一门“简化”的编程语言。 要实现DSL,岂不是就要写一门编程语言了?? 答案是 yes。 但是不用惊慌,写编程语言也不是那么的困难, 绝大部分的东西都有现成的。


AST抽象语法树
#

参考: https://resources.jointjs.com/demos/javascript-ast
编程语言中最核心的概念就是这个了, AST抽象语法树。 一段代码:

var a = 42;
var b = 5;
function addA(d) {
    return a + d;
}
var c = addA(2) + b;

过一遍抽象语法树之后:


图片.png
图片.png
图片.png

可以看到已经解析成了逻辑结构了, 在这之后,只要预先定义了上图中的 VariableDeclation``CallExpression操作,那么就算完工了。


MPS IDE
#

上述的过程也有IDE来完成,比如jetbrain的 MPS IDE,就是完成上述工作的IDE。 详细教程请自行百度或者谷歌。