---
source_url: https://t3.at/blog/2026-10-17-parser-combinators/
source_title: "Parser Combinators"
tags: parser-combinators,typescript,functional-programming,parsing
generated_at: 2026-10-18T12:00:48.918Z
model: claude-haiku-5-5
---
# パーサーコンビネータの仕組み：小さな解析関数を組み合わせて文字列を解析する

パーサーコンビネータは、入力文字列から値と残りの文字列を返す小さなパーサー関数を組み合わせて、文字列を解析する手法である。記事はTypeScript風の型定義と具体例を用いて、その仕組みを説明している。

本記事は、パーサーコンビネータを、pHello、pInteger、pIgnoreWhitespace、pSeq、pMapといった小さく組み合わせ可能なパーサー関数から文字列パーサーを構築する手法として解説する。パーサーの型は「入力文字列を受け取り、解析された値と残りの文字列のペアを返す関数」として定義されている。

## Parser型と基本的な例

記事では、Parser of Tの型を、入力文字列から、Tの値と残りの文字列のペアを返す関数として定義している。

例えば、pIntegerに「10 20 30」を与えると、「10」の後で入力が切り分けられ、数値の10と残りの文字列「 20 30」が返される。

## 組み合わせによる解析と構造化

「Hello 100」の解析では、pHello、pIgnoreWhitespace、pIntegerを順に適用し、各パーサーが前のパーサーの残りの文字列を受け取る。pHelloは「Hello」と「 100」を返し、pIgnoreWhitespaceは「 」と「100」を返す。最後にpIntegerが「100」と空の文字列を返す。

pSeqにpHello、pIgnoreWhitespace、pIntegerを渡すと、その結果は[string, null, number]のタプルを値とするParserになる。

「Hello, world!」の文字列は、greetingが「Hello」、whoが「world」であるオブジェクトに解析される。また、「Hello 100」をpGreetingで解析すると、「Hello 100」と空の文字列が返される。記事は末尾で、foldとunfoldの例も簡単に扱っている。

## pingの出力サンプルの解析

記事は1.1.1.1に対するping出力のサンプルも扱い、その内容をJSON表現に解析した例を示している。

統計情報では、送信が8パケット、受信が7パケット、パケットロスが12.5%、合計テスト時間が7008msと示されている。往復時間は、最小が47.129ms、平均が115.880ms、最大が388.750ms、mdevが112.515msである。

*この記事は元記事の事実のみに基づいて自動生成されました。*

## 出典

- 媒体名: 不明
- 元タイトル: Parser Combinators
- URL: https://t3.at/blog/2026-10-17-parser-combinators/
