可变文本语法:内部DSL的模式实现技术
1. 内部DSL扩展相关模式
在内部DSL扩展中,有几种关键的模式,它们各自解决了不同的问题,具体如下表所示:
| 模式 | 问题 | 解决方案 |
| — | — | — |
| 责任链(CHAIN OF RESPONSIBILITY) | 发送消息的客户端不知道请求行为的实际提供者(如负责的构建器) | 让多个(构建器)对象有机会充当语法处理行为的提供者 |
| 表达式构建器(EXPRESSION BUILDER) | 实例化语言模型和处理DSL脚本的行为由相同的(模型)类实现 | 将实例化和DSL语法处理分离到单独但紧密关联的(构建器与模型)对象中,并且为每个语法变体使用单独的构建器 |
| 消息重定向器(MESSAGE REDIRECTOR) | 如何表示DSL调用以及如何在链式构建器之间实现其传播 | 通过内置或自定义的重定向机制(如动态接收或代理)将(DSL)调用从一个构建器对象重定向到另一个构建器对象 |
1.1 责任链模式
在责任链模式中,多个构建器可以处理客户端发送的DSL处理请求,客户端事先并不知道最终负责的构建器。每个细化的构建器都可以作为潜在的消息重定向器。构建器链可以使用不同的宿主语言环境(如Java)来实现。在DjDSL中,采用了NX/Tcl提供的装饰器混入(decorator mixins)来实现这种模式。
1.2 DSL扩展
DSL开发者将基础语言与语言扩展进行组合。语言扩展是一个不完整的语言片段,它直接依赖于基础语言来完成(在具体语法、抽象语法和行为方面)。以图建模语言家族为例,基础语言由DjDSL语言模型Gr
超级会员免费看
订阅专栏 解锁全文
1109

被折叠的 条评论
为什么被折叠?



