私はHaskellを初めて使っています。私は、Parsecを使ってJSONパーサーを書くことを試みています。これはほとんどうまくいっています。リストやオブジェクトを比較的小さなコードで解析することもできます。しかし、JSONのために私はまたHaskellのParsec用の "電池"
- 整数(おそらく符号付き)(おそらくは例えば、「3.4E-8」として科学的表記法を使用して)
- フロート
- 例えば付き文字列のようなプリミティブを解析する必要がありますエスケープされた引用符
私は、これらのようなものをパーセルの一部として使う準備ができていることを期待していました。私が得られる最も近いものはParsec.Tokensモジュール(integer
と友人を定義します)ですが、それらのパーサーはJSONのような単純なものを解析する必要があるような "言語定義"を必要とします。プログラミング言語用。
だから私の質問は以下のとおりです。
はここに行くための正しい方法Parsec.Tokenで機能していますか?その場合は、適切な言語定義を作成する方法は?
整数などのための「プリミティブ」パーサーは他に定義されていますか?別のパッケージに入っているのでしょうか?
私はこれらの種類の低レベルパーサーを自分で書いていますか?私は
が、私はこのサイト上の質問はMegaparsecは、これらのプリミティブが含まれていると言うことに気づいた(曖昧な科学的データ形式など)...頻繁にそれらを再利用し、自分自身を見ることができます[1]が、私はこれらをすることはできませんと仮定parsecで使用されます。
関連質問:
How do I get Parsec to let me call `read` :: Int?
How to parse an Integer with parsec
あなたには当てはまらないオプションのパーザー(私はそれがすべてだと思います)。 – sepp2k
できれば、 'megaparsec'を使ってください。 'parsec'のより現代的な書き直しです(実際には維持されています)。 – Alec