领域特定语言(DSL)是一种针对特定领域优化的小型语言。由于 DSL 有明确的针对性,它允许使用者声明自己_想要什么_,而不是_如何去_做,因此能极大地提升工作效率和理解程度。
它的一个常见应用领域是复杂的自定义和配置。
例如,DOT 语言允许你用文本描述一张图,然后由 Graphviz 工具(比如dot)将其转换成图片。一个简单的图长这样:
graph {
graph [bgcolor="yellow"]
a [color="red"]
b [color="blue"]
a -- b [color="green"]
}
把这段内容放进文件example.dot,再运行dot example.dot -T png -o example.png,就会生成一张example.png图片:黄色背景上,一个红色圆圈和一个蓝色圆圈由一条绿色线相连。
请编写一个类似 Graphviz dot 语言的领域特定语言。
我们的 DSL 与 Graphviz dot 语言相似,都是用来创建图数据结构的。不过,与 DOT 语言不同,我们的 DSL 是一种内部 DSL,只在本语言中使用。
这道练习会要求你为一种类似 DOT 语言的 DSL 定义语法。
这个任务很可能需要你使用记法或宏。你可以查看参考资料。
在这道练习中,边用节点之间的单个-表示,这与实际 DOT 语言中使用的--不同。这样可以避免与 Lean 的单行注释语法冲突。
另外,每条语句都以;结尾,包括图级别的注释。