背景 #
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;
过一遍抽象语法树之后:
可以看到已经解析成了逻辑结构了, 在这之后,只要预先定义了上图中的 VariableDeclation``CallExpression
操作,那么就算完工了。
MPS IDE #
上述的过程也有IDE来完成,比如jetbrain的 MPS IDE,就是完成上述工作的IDE。 详细教程请自行百度或者谷歌。