この記事はHaskell Advent Calendar 20234日目の記事です。 最近node-semverのパーサーを作る機会があったので、HappyとAlexを用いたパーサーの作り方について紹介します。あまりnode-semverの仕様には立ち入らず、HappyとAlexの使い方について焦点を当てます。 パーサーの実装はここです。 パーサの種類 パーサーの実装は主に手書きするか文法書から生成する2通りの方法があります。最も有名なのは再帰降下構文解析と、LR構文解析でしょうか。 PEGやパーサーコンビネータは再帰降下に属し、yaccやbisonはLR系の構文解析に属します。 こちらのサイトでは様々な構文解析法の分析をしています。箇条書きで抄訳したいと思います。 再帰降下系 わかりやすい 実はどの文法クラスに対応するか理論的に明らかになっていない 曖昧な文法を事前に検知できない 無限に