DSL之三 DSL实现

笔记:DSL笔记之三 DSL实现

Written by 某L. Posted in Domain Specific LanguageMDA

ClipboardImage1.png

一般来说,DSL的实现包含三种方式:内部DSL,外部DSL,DSL工作台

内部DSL是指DSL使用宿主语言实现,需要遵循宿主语言的语法;

外度DSL通常拥有独立的语法,通过编译或解释形成目标模型;

DSL工作台通常表现为一个支持DSL开发的IDE。

 

DSL一般先解析为语义模型(Semantic Model),有时还会进一步生成目标代码(target code)。

ClipboardImage

在解析为语义模型的过程中,一般隐含着一个概念——语法树(Syntax Tree)

ClipboardImage(1)

在内部DSL中,语法树的实现是以函数参数调用(嵌套函数 Nested Function)及嵌套对象(方法链)的形式。有时语言并没有强制的层次结构,那么就需要借助函数序列(Function Sequence)和上下文变量(Context Variables)来模拟层次结构。

语法(grammar)是用于描述文本流如何转换为语法树的规则集。

语法树和语义模型的不同之处在于:同样的语法树可能有不同的语义模型,反义亦然。

 

在解析生成语法树的过程中,解析器可能需要存储一些数据。为解决这个问题,引入了符号表(Symbol Table)

image

本质上来讲,符号表是一个字典,键为标识符,值为语法树中对应的对象。

DSL的测试可以分为三部分,对语义模型的测试,对解析器的测试,以及对DSL脚本测试。

猜你喜欢

转载自lazing.iteye.com/blog/1636475
DSL