DSL 模式清單

我在 領域特定語言 一書中使用模式結構來組織我用於描述 DSL 的概念。以下是該書中的模式清單。每個模式都連結到各模式的頁面。這些頁面不包含太多細節,只比書中相關章節的說明稍多一點。我建立這些頁面的主要目的是為每個模式提供參考 URI。

自適應模型

將程式碼區塊排列在資料結構中,以實作替代的運算模型。

替代式標記化

在解析器內變更詞法分析行為。

註解

程式元素(例如類別和方法)的資料,可在編譯或執行期間處理。

BNF

正式定義程式語言的語法。

類別符號表

使用類別及其欄位來實作符號表,以支援靜態型別語言中的型別感知自動完成。

封閉

可表示為物件(或一級資料結構)的程式碼區塊,並透過允許它參照其詞法範圍,將其無縫地放入程式碼流程中。

建構函式產生器

使用將建構函式引數儲存在欄位中的產生器,逐步建立不可變物件。

內容變數

使用變數來儲存解析期間所需的內容。

決策表

以表格形式表示條件式陳述的組合。

分隔符導向轉譯

透過將原始文字區分成區塊(通常是行)並解析每個區塊來翻譯。

相依網路

由相依關係連結的任務清單。若要執行任務,請呼叫其相依項,並將這些任務視為先決條件來執行。

動態接收

在接收類別中未定義訊息的情況下處理訊息。

嵌入式詮釋

將詮釋器動作嵌入語法中,以便執行剖析器會導致文字直接詮釋為產生回應。

嵌入式翻譯

將輸出產生程式碼嵌入剖析器中,以便在剖析執行時逐步產生輸出。

嵌入式輔助程式

透過提供所有必要的函式給範本化機制,將範本化系統中的程式碼減至最少化的物件。

表達式產生器

在一般命令查詢 API 上提供流暢介面的物件或物件系列。

外部程式碼

將一些外部程式碼嵌入外部 DSL 中,以提供比 DSL 中規定的更精細的行為。

函式序列

將函式呼叫組合成一個陳述式序列。

世代差距

透過繼承將產生的程式碼與非產生的程式碼分開。

文字延伸

將方法新增至程式文字。

文字清單

使用文字清單表示語言表達式。

文字對應

將表達式表示為文字對應。

巨集

使用 範本化產生 在語言處理之前將輸入文字轉換為不同的文字。

方法串接

讓修改器方法傳回主機物件,以便在單一表達式中呼叫多個修改器。

模型無知產生

將所有邏輯硬編碼到產生的程式碼中,以便沒有 語意模型 的明確表示。

模型感知產生

產生具有 DSL 語意模型明確模擬的程式碼,以便產生的程式碼具有通用特定分離。

巢狀封閉

透過將函式呼叫的陳述式子元素放入引數中的封閉來表達它們。

巢狀函式

透過將函式呼叫嵌套為其他呼叫的引數來組合函式。

巢狀運算式表達式

可以遞迴包含相同形式表達式的運算式表達式(例如,算術和布林表達式)。

換行分隔符號

使用換行作為陳述式分隔符號。

通知

收集錯誤和其他訊息以回報給呼叫者。

物件範圍

放置 DSL 腳本,以便裸露參考將解析為單一物件。

剖析樹操作

擷取程式碼片段的剖析樹,以 DSL 處理程式碼加以操作。

組合子解析器

透過組合解析器物件,建立由上而下的解析器。

解析器產生器

建構一個由文法檔案驅動的解析器,作為 DSL。

產生式規則系統

透過一組產生式規則組織邏輯,每個規則都有條件和動作。

遞迴下降解析器

使用控制流程建立由上而下的解析器,用於文法運算子,以及遞迴函數用於非終端識別器。

正規表示式表單詞法分析器

使用正規表示式清單實作詞法分析器。

語意模型

由 DSL 填充的模型。

狀態機

將系統建模為一組明確的狀態,並在它們之間進行轉換。

符號表

在剖析期間儲存所有可識別物件的位置,以解析參考。

語法導向翻譯

透過定義文法並使用該文法建構翻譯,來翻譯原始文字。

範本產生

透過手寫輸出檔案並放置範本呼叫,來產生變數部分,以產生輸出。

文字潤飾

在更嚴肅的處理之前,執行簡單的文字替換。

轉換器產生

透過撰寫轉換器來產生程式碼,該轉換器會導覽輸入模型並產生輸出。

樹狀結構建立

解析器會建立並傳回原始文字的語法樹狀結構表示,稍後會由樹狀結構巡覽程式碼加以操作。