JavaScriptのパーサコンビネータparsimmonをTypeScriptで使ってみる

時代の流れに逆らえなくなってきた感があるので、TypeScriptの練習。

とはいえ、最初は慣れ親しんだものから攻めるのが現実的だと思われるので、パーサコンビネータを題材にする。

jneen/parsimmon · GitHub

ライブラリはこれを使う。 自作するかとも考えたが、特に車輪の再発明する理由がなかったので採用。

お題

FParsecで遊ぶ - 2つのアンコール

このオフサイドルールな入力を解析する。

出来上がり

https://github.com/pocketberserker/sample-parser/tree/3c3f2ea57e0dc647dc88dedb32e6cf1c113af5cb

思ったこと

  • tuple を使うと型が推論されてもよさそうな部分で推論されなくなることがあった気がするので、あまり使用しないほうがいいのか?
  • 現時点のDefinitelyTyped に登録されている d.ts が最新に対応していないのでちょっと自分で定義してあげる必要がある
  • ひたすらメソッドチェーンなので気を付けないとインデントが…
  • array.sliceしまくっているけど、これいいのだろうか…?

余談

実は最初のほうはJavaScriptでも書いていたのだが、テスト実行時に「hogefuga not found」を連発されて降参した。 やっぱりコンパイルがないと無理だったよ…。