text: 在計算機程式設計中 語法分析組合子 是一個 高階函式 ，它接受幾個的語法分析器作為輸入，並返回一個新的語法分析函器作為其輸出。 在這個上下文中， 語法分析器 是一個函式，它接受字串作為輸入，返回的一些結構作為輸出，通常為 分析樹 或一組索引表示在字串中成功停止分析的位置。 分析器組合子使用 遞迴下降分析 戰略，提倡模組式建造和測試。 這種分析技術是所謂的 組合分析。使用組合子構建的分析器易於構造、可讀、模組化、結構良好且易於維護它們被廣泛地用於 領域特定語言的編譯器和處理器的原型設計中，在這些語言中，複雜多樣的語義操作與語法處理緊密整合。1989年，Richard Frost和John Launchbury演示了使用語法分析組合子構造的自然語言直譯器。Graham Hutton在1992年也使用了高階函式進行基本解析。S.D. Swierstra在2001年還展示瞭解析器組合器的實用方面。在2008年，Frost、Hafiz和Callaghan用Haskell中描述了一組語法分析組合子，它們解決了長期存在的通用左遞迴的問題，它也是一個完整的，只需要多項式時間、空間的自頂向下解析工具。基本想法.在任何一種程式語言，擁有 頭等函式，分析器組合子可以用基本的分析器構造用於更復雜的規則的分析程式。 例如，上下文無關文法 (CFG)的產生式可能有一個或多個備選推導方案，每個備選方案可以由一系列的 非終結符 和/或 終結符，或者推導方案可以由一個單一的非終結符或終結符端或空串組成。如果一個簡單的分析程式適用於這些推導方案，語法分析組合子可以用來組合這些分析器，返回一個新的分析器，這可以識別出的任何推導方案。在支援 運算子過載 的語言中，一個語法分析組合子可以使用 中綴 運算子形式，用於將不同的分析器膠合成一個完整的規則。語法分析組合子使得分析程式能以一個嵌入式的風格編寫，這使得程式結構上類似於正則文法的規則。 因此，實現方式可以被認作為可執行的規格並有所有的相關優點。 (值得注意的是：可讀性)組合子.為了保持討論比較簡單，我們只討論語法分析組合子作為 "識別器" 的情況。 如果輸入串的長 codice_1 ，其成員透過一個索引 codice_2，一個 "識別器" 是一個語法分析器，它返回一組索引，表示分析器在位置 codice_2成功地識別出了一個序列的標記。一個空的結果表明在索引 codice_2識別器沒有識別到任何序列的開始。formula_1formula_2注意可能有多個不同的方法來分析一個字串，同時在相同的索引處結束：這表明一個 二義性文法 。簡單的識別器不承認這些二義性；每個可能的結束索引在結果集中只出現一次。 對於更完整的結果集合，必須返回一個更復雜的物件，例如 分析樹。下面的定義的兩個基本的識別器 codice_10 和 codice_11，我們可以界定兩個主要的語法分析組合子，用於選擇和順序：formula_3formula_4例.考慮一個有高度二義性的 上下文無關文法, codice_20. 使用上面定義的組合子，我們可以模組化的定義可執行的符號，這種語法在一個現代化的函式式語言(例如 Haskell)作為 codice_21。當識別器 codice_22 在一個輸入序列 codice_23 的位置 codice_24上被應用，根據上述定義，它將返回的結果集合 codice_25.
metadata: erhwenkuo/wikipedia-zhtw
metadata: 語法分析組合子
metadata: https://zh.wikipedia.org/wiki?curid=6679205