使用Javascript实现DSL解析器:揭开DSL神秘面纱

前言

这篇文章在一个比较高的抽象层次,讨论了什么是DSL,DSL的分类以及实现一个DSL所需的理论知识和一些关键的技术点。让读者对实现DSL能有一个全局的认识,在后面的文章中再深入介绍各个技术点,最终会使用Javascript实现一个DSL的编译器生成器。

DSL 是什么

DSL(Domain Specific Language)是一种用来解决特定领域问题的计算机编程语言我们经常使用的CSS、SQL都属于DSL。还有其他的比如模版语言,从名字就可以知道他是一种领域特定语言,另外Docker的镜像描述文件Dockerfile也是一种DSL, 与领域特定语言相对的就是通用编程语言比如C#、Java等。

DSL的分类

Martin Fowler将DSL分为内部DSL和外部DSL,内部DSL一般是基于宿主语言封装的一个类库,提供领域表现力更强的API给使用方,比如jQuery的链式调用API可以认为是一种内部DSL实现。实现外部DSL相当于创造一个新的编程语言,根据领域表现力需求我们可以去定义它的词法规则、语法规则。我需要为外部DSL实现一个编译器,对它进行词法分析、语法法析、语义分析最后生成目标语言。实现外部DSL的理论基础是编译原理,在文章后面的部分提到的DSL指的是外部DSL。

为什么需要实现DSL

我们知道按照不同的抽象层次,计算机编程语言的抽象层次从高到低依次为,高级语言、汇编语言、机器语言。 抽象层次越高对人类越友好、表现力越强、执行性能也越差,与之相对的抽象层级越低对机器越友好、表现力越差、性能也越好。 而领域特定语言(DSL)在计算机编程语言的抽象层次中位于高级语言之上,实现DSL主要的目标是为了能够以更简单、更容易理解的方式完成我们的业务需求。为什么说抽象层次越高就越容易理解呢

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值