DSL 模式列表
我的 关于领域特定语言的书 使用模式结构来组织我用来描述 DSL 的概念。以下是该书中模式的列表。每个模式都链接到一个模式页面。这些页面没有太多细节,只是对书中相关章节的简要说明。我创建这些页面的主要目的是为每个模式提供一个参考 URI。
自适应模型
将代码块排列在数据结构中以实现替代计算模型。
替代标记化
从解析器内部更改词法分析行为。
注释
关于程序元素(如类和方法)的数据,可以在编译或执行期间进行处理。
BNF
正式定义编程语言的语法。
类符号表
使用类及其字段来实现符号表,以便在静态类型语言中支持类型感知自动完成。
闭包
可以表示为对象(或一等数据结构)的代码块,通过允许它引用其词法范围,可以无缝地放置到代码流中。
构造器构建器
使用存储构造函数参数的字段的构建器来增量创建不可变对象。
上下文变量
使用变量来保存解析期间所需的上下文。
决策表
以表格形式表示条件语句的组合。
分隔符引导翻译
通过将源文本分解成块(通常是行)然后解析每个块来翻译源文本。
依赖网络
由依赖关系链接的任务列表。要运行任务,您需要调用其依赖项,并运行这些任务作为先决条件。
动态接收
处理消息,而无需在接收类中定义它们。
嵌入式解释
将解释器操作嵌入到语法中,以便执行解析器会导致文本被直接解释以生成响应。
嵌入式翻译
将输出生成代码嵌入到解析器中,以便在解析运行时逐步生成输出。
嵌入式助手
一个对象,通过向该模板机制提供所有必需的函数,可以最大程度地减少模板系统中的代码。
表达式构建器
一个对象或一组对象,它在普通命令查询 API 上提供流畅的接口。
外部代码
将一些外部代码嵌入到外部 DSL 中,以提供比 DSL 中指定的更详细的行为。
函数序列
函数调用作为一系列语句的组合。
生成差距
通过继承将生成的代码与非生成的代码分开。
字面量扩展
向程序字面量添加方法。
字面量列表
使用字面量列表表示语言表达式。
字面量映射
将表达式表示为字面量映射。
宏
在使用 模板生成 的语言处理之前,将输入文本转换为不同的文本。
方法链
使修饰符方法返回主机对象,以便可以在单个表达式中调用多个修饰符。
模型无知生成
将所有逻辑硬编码到生成的代码中,以便没有 语义模型 的显式表示。
模型感知生成
使用 DSL 语义模型的显式模拟生成代码,以便生成的代码具有泛型特定分离。
嵌套闭包
通过将函数调用的语句子元素放入参数中的闭包来表达它们。
嵌套函数
通过将函数调用作为其他调用的参数进行嵌套来组合函数。
嵌套运算符表达式
可以递归地包含相同形式的表达式的运算符表达式(例如,算术和布尔表达式)。
换行符分隔符
使用换行符作为语句分隔符。
通知
收集错误和其他消息以报告给调用者。
对象作用域
放置 DSL 脚本,以便裸引用将解析为单个对象。
解析树操作
捕获代码片段的解析树,以便使用 DSL 处理代码对其进行操作。
解析器组合器
通过解析器对象的组合来创建自顶向下的解析器。
解析器生成器
使用语法文件作为 DSL 构建由语法文件驱动的解析器。
生产规则系统
通过一组生产规则组织逻辑,每个规则都有一个条件和一个动作。
递归下降解析器
使用语法运算符的控制流和非终结符识别器的递归函数来创建自顶向下的解析器。
正则表达式表词法分析器
使用正则表达式列表实现词法分析器。
语义模型
由 DSL 填充的模型。
状态机
将系统建模为一组具有状态转换的显式状态。
符号表
在解析期间存储所有可识别对象的存储位置,以解析引用。
语法引导翻译
通过定义语法并使用该语法来构建翻译来翻译源文本。
模板生成
通过手写输出文件并将模板调用放置到生成可变部分来生成输出。
文本润色
在更严肃的处理之前执行简单的文本替换。
转换器生成
通过编写一个转换器来生成代码,该转换器遍历输入模型并生成输出。
树构建
解析器创建并返回源文本的语法树表示,该表示随后由树遍历代码进行操作。