DSL之三 DSL实现
程序员文章站
2022-04-01 20:05:06
...
笔记:DSL笔记之三 DSL实现
一般来说,DSL的实现包含三种方式:内部DSL,外部DSL,DSL工作台
内部DSL是指DSL使用宿主语言实现,需要遵循宿主语言的语法;
外度DSL通常拥有独立的语法,通过编译或解释形成目标模型;
DSL工作台通常表现为一个支持DSL开发的IDE。
DSL一般先解析为语义模型(Semantic Model),有时还会进一步生成目标代码(target code)。
在解析为语义模型的过程中,一般隐含着一个概念——语法树(Syntax Tree)
在内部DSL中,语法树的实现是以函数参数调用(嵌套函数 Nested Function)及嵌套对象(方法链)的形式。有时语言并没有强制的层次结构,那么就需要借助函数序列(Function Sequence)和上下文变量(Context Variables)来模拟层次结构。
语法(grammar)是用于描述文本流如何转换为语法树的规则集。
语法树和语义模型的不同之处在于:同样的语法树可能有不同的语义模型,反义亦然。
在解析生成语法树的过程中,解析器可能需要存储一些数据。为解决这个问题,引入了符号表(Symbol Table)
本质上来讲,符号表是一个字典,键为标识符,值为语法树中对应的对象。
DSL的测试可以分为三部分,对语义模型的测试,对解析器的测试,以及对DSL脚本测试。
下一篇: spark SQL编程动手实战-01
推荐阅读
-
bp(net core)+easyui+efcore实现仓储管理系统——入库管理之三存储过程(三十九)
-
排序之三:简单选择排序(C语言实现)
-
一步一步实现web程序信息管理系统之三----登陆业务逻辑实现(验证码功能+参数获取)
-
Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了
-
读懂 Gradle 的 DSL
-
Android Gradle脚本从Groovy迁移到Kotlin DSL
-
ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解
-
abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之三(二十九)
-
DSL的一篇blog 还在看, 没看懂标志是什么含意
-
领略一下ruby的DSL能力