IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]DSL:领域特定语言学习笔记 一

    chgaowei发表于 2014-03-15 20:45:58
    love 0
    第一部分:叙述
    DSL编程:有人将DSL编程称之为声明式编程。

    DSL是在模型之上建立的一种更加灵活的对 模型化的理解和使用方式。

    语义模型是DSL的核心。

    内部DSL:用通用语言的语法表示DSL,需要安装某种风格使用这种语言。
    外部DSL:在主程序设计语言之外,用一种单独的语言表示领域专有语言。可以是定制语法,或者遵循另外一种语法,如XML。

    DSL定义:针对某一领域,具有受限表达性的一种计算机程序设计语言。

    外部DSL:不同于应用系统主要使用语言(c,java,c++,c#)的语言。

    内部DSL:通用语言的特定用法。内部DSL通常是一段合法的程序,但是具有特定的风格。而且只用到了语言一部分特性。Ruby形成了显著的DSL文化。后面好好看看。

    语言工作平台:专用IDE,用于构建和定义DSL。

    DSL伴随语义模型出现,语义模型会表现为程序库或者框架,对于构建DSL而言,语义模型不可或缺。DSL只是位于其上的一层而已。

    命令查询时api定义了抽象领域的词汇,而内部DSL则再次基础上添加了语法。

    内部DSL给人的感觉是一个整句,而并非一个无关命令。

    语言性:领域词汇的连贯性。

    片段DSL(SQL,正则表达式),独立DSL。

    DSL的受限表达性可以使DSL语言不易出错,即便出错,也易于发现。这是受限表达性的意义。

    声明式编程:定义做什么,而不是用一堆命令语句来描述怎么做。这一点很重要。DSL就是用声明式编程。

    防止DSL逐渐演变为一种通用语言,要受限表达。目的防止DSL过于复杂,可维护性降低,学习成本提升,偏离方向。

    不要让DSL读起来向自然语言。它是程序语言,比自然语言更加准确和简洁。


    语义模型位于语言和DSL之间,为二者解耦。

    DSL脚本,解析器,语义模型,模型——DSL自上而下几个层次。

    内部DSL和外部DSL区别:是否使用通用语言写。

    DSL的执行有两种方式,执行语义模型与代码生成。

    可以考虑从语义模型生成代码。


    DSL---->解析器----->语义模型----->执行
    | |
    | |
    | V
    | 代码生成
    V
    代码生成




沪ICP备19023445号-2号
友情链接