前言
先看下面这段代码:input =~ /d{ 3} -d{ 3}-d{4}/
你是不是会嘲笑一句,不就是个正则表达式匹配,也许你还知道它匹配的是什么。
正则表达式常常由于过于费解而遭受指责,但试想一下,如果你所能够使用的都是普通的正则控制代码,这段模式匹配会变成什么样子。而这段代码跟正则表达式相比,又是何等容易理解,容易修改?
这就是**DSL(Domain-Specific Language,领域特定语言)**想想前面的那段正则表达式,为什么我要在这里给大家说DSL这个东西,因为他的两大优势
1、DSL的第一个优势是它擅长在程序中的某些特定地方发挥作用,并且让它们容易理解,进而提高编写、维护的速度,也会减少bug。
2、DSL的第二个优势就不仅仅限于程序员的范畴了。因为DSL往往短小易读,所以非程序员也能看懂这些驱动他们重要业务的代码。把这些真实的代码暴露在理解该领域的人们面前,可以确保程序员和客户之间有非常顺畅的沟通渠道。
但是当人们说起DSL的时候,他们常说DSL可以让你不再需要程序员。我对这一论调极度不认同,毕竟那是说COBOL的。不过也确实有些语言是由那些自称不是程序员的人来用的,比如CSS。对这种语言来说,读比写要重要得多。如果一个领域专家可以阅读并且理解核心业务代码中的绝大部分,那他就可以跟写这段代码的程序员进行深入细节的交流。
第二个原因是使用DSL并非易事,不过回报也是相当丰厚的。软件开发中最狭窄的瓶颈就是程序员和客户之间的沟通,任何可以解决这一问题的技术都值得学习。
适应人群
本书的理想读者是那些正在思考构建DSL的职业软件程序员。我觉得这种类型的读者都应该有多年的工作经验,认同软件设计的基本思想。
如果你深入研究过语言设计的话题,那这本书里大概不会有什么你没有接触过的资料。我倒是希望我在书中整理并表述信息的方式对你有所帮助。虽然人们在语言设计方面做了大量的工作——尤其是在学术领域,可这些成果能够为专业编程领域服务的却寥寥无几。
叙述部分的前几章还可以澄清一些困惑,比如什么是DSL,DSL有什么用途。通读第一部分以后,你就可以更全面地掌握 DSL的不同实现技术。
给大家介绍一下这本来自软件开发教父老马的书籍
第一部分,入门
第1章入门例子
第2章使用DSL
第3章实现DSL
第4章实现内部 DSL
第5章实现外部 DSL
第6章内部 DSL vs外部 DSL
第7章其他计算模型概述
第8章代码生成
第9章语言工作台
第二部分通用主题
第10章各种DSL
第11章语义模型
第12章符号表
第13章语境变量
第14章构造型生成器
第15章宏
第16章通知
第三部分外部 DSL主题
第17章分隔符指导翻译
第18章语法指导翻译
第19章BNF
第20章基于正则表达式表的词法分析器
第21章递归下降法语法解析器
第22章解析器组合子
第23章解析器生成器
第24章树的构建
第25章嵌入式语法翻译
第26章内嵌解释器
第27章外加代码
第28章可变分词方式
第 29章嵌套的运算符表达式
第30章 以换行符作为分隔符
第31章外部 DSL拾遗
第四部分 内部 DSL主题
第32章表达式生成器
第33章函数序列
第34章嵌套函数
第35章方法级联
第36章对象范围
第37章闭包
第38章嵌套闭包
第39章列表的字面构造
第40章Literal Map
第41章动态接收
第42章标注
第43章解析树操作
第44章类符号表
第45章文本润色
第46章为字面量提供扩展
第五部分 其他计算模型
第47章适应性模型
第48章 决策表
第49章依赖网络
第50章产生式规则系统
第51章状态机
第六部分 代码生成
第52章基于转换器的代码生成
第53章模板化的生成器
第54章嵌入助手
第55章基于模型的代码生成
第56章无视模型的代码生成
第57章代沟
每一个知识点除了原理的讲解之外,还有相应的图解以及源码展示,便于大家理解和观看
**需要这份资料的,点赞后,点击这里即可查看获取方式