昨年くらいから断続的にテキストパーサーを調べて実験コードを書いてきた (この辺の話)のですが、 機能変更が落ち着いてきたのでとりあえず公開しました。TypeScript 版です。 ライセンスは MIT です。 このブログで書いてきたパーサーコンビネータは Kotlin で実装しているのですが、 それを TypeScript に移植してあれこれ修正したものです。 ライブラリ本体は TypeScript で書いていますが、パースするコードを書くときは JavaScript でゆるくかけるので楽です。
Kotlin 版では tailrec が使えたので深い再帰が発生してもスタックオーバーフローにはならないと思うのですが、 TypeScript 版はそのあたりの対策は今のところしていません。 そんな巨大なテキストをパースすることもないのかな。
取り急ぎプロジェクト関連のリンクを列挙しておきます。
Playground は QuickJS をブラウザサイドで使ってその場(Playground)で書いたパーサーを評価&実行しています。 この辺 QuickJS を ブラウザ上で使う(その2)で書いたコードを使っています。
fern-parser 自体の使い方はそのうち書きます。