欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DSL之三 DSL实现

程序员文章站 2022-04-01 20:05:06
...

 

笔记:DSL笔记之三 DSL实现

Written by 某L. Posted in Domain Specific LanguageMDA

DSL之三 DSL实现
            
    
    博客分类: MDA dsldomain specific languagemda 

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

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

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

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

 

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

DSL之三 DSL实现
            
    
    博客分类: MDA dsldomain specific languagemda 

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

DSL之三 DSL实现
            
    
    博客分类: MDA dsldomain specific languagemda 

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

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

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

 

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

DSL之三 DSL实现
            
    
    博客分类: MDA dsldomain specific languagemda 

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

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