問題タブ [attoparsec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
594 参照

parsing - Attoparsec: 複数文字の区切り文字までスキップする (ただし含まない)

ほとんどすべての文字を含むことができる文字列があります。文字列の中に delimiter があり{{{ます。

例: afskjdfakjsdfkjas{{{fasdf.

attoparsec を使用して、 のParser ()前のすべての文字をスキップするが、 ?{{{を消費しないa の慣用的な書き方は何{{{ですか?

0 投票する
1 に答える
384 参照

haskell - Attoparsec はユーザー状態の保存と変更をサポートしていますか?

私は Attoparsec を使用しており、解析タスク全体でユーザー状態値を追跡したいと考えています。

私は Parsec のモナド関数 getState、putState、および modifyState に精通していますが、Attoparsec 内で類似物を見つけることができないようです。Attoparsec の内部で、または State モナドを使用してこれを行う簡単な方法はありますか?

0 投票する
1 に答える
168 参照

haskell - attoparsec: 失敗するのではなく、入力の一部で成功する

私はattoparsecパーサーを持っていて、それをテストしていますが、パーサーの一部にコメントしてテストを実行すると、パーサーが返されずLeft "parse error at line ..."、代わりにRight [].

parseOnlyこれ以上入力がないことを明確にするために使用していることに注意してください。

それ以外の場合は、部分的に解析された入力を取得すると便利です。これは間違いなく便利であり、私はそれを持っていることをうれしく思います。ただし、入力全体が消費されていないことをお知らせしたいと思います。たぶん、最後に消費された文字の文字オフセットを取得するか、それが必要な場合は、少なくともオプションが返されLeftます。

関連する場合、パーサーはそこにあります。

たとえば、次の行にコメントすると:

テストを実行すると、たとえば次のようになります。

これはそのテストからのものです。

0 投票する
1 に答える
185 参照

haskell - attoparsec の takeWhile1 のより一般的な (しかし効率的な) バージョンを作成するにはどうすればよいですか?

Data.Attoparsec.TextエクスポートtakeWhiletakeWhile1:

述語が を返す限り入力を消費しTrue、消費された入力を返します。

このパーサーは失敗しません。False入力の最初の文字で述語が返される場合、空の文字列が返されます。

[...]

述語が を返す限り入力を消費しTrue、消費された入力を返します。

このパーサーは、入力の少なくとも 1 文字で成功する述語を必要とします。述語が返されない場合、Trueまたは入力が残っていない場合、失敗します。

attoparsecのドキュメンテーションは、ユーザーに

の代わりに、Text可能な限り 指向のパーサーを使用してください。2 種類のパーサーのパフォーマンスには約 100 倍の違いがあります。takeWhile1many1 anyChar

takeWhile1これらの 2 つのパーサーは非常に便利ですが、より一般的なバージョンの、より具体的には、仮説パーサーの必要性を常に感じています。

predicate を満たす文字を少なくとも 解析します。ここで、 は任意の非負の整数です。loflo

takeWhile1の実装を見てみましたが、プライベートな関数がたくさん使用されており、Data.Attoparsec.Text.Internal簡単に一般化できるようには見えません。

私は次の適用可能な実装を思いつきました:

それは宣伝どおりに機能し、

しかし、 によって返された結果の中間リストをパックする必要性はcount、特に が大きい場合に心配ですlo... への推奨に反するようです

Text可能な限り 指向のパーサーを使用してください [...]

何か不足していますか?takeWhileLoそのようなコンビネータを実装するより効率的/慣用的な方法はありますか?

0 投票する
2 に答える
336 参照

haskell - 行末シーケンスが CRLF の場合、このパーサーが常に失敗するのはなぜですか?

この単純なパーサーは、次の形式のメッセージを解析することが期待されています

1 つの EOL はフィールド セパレータとして機能し、2 つの EOL はメッセージ セパレータとして機能します。EOLセパレーターが の場合は完全に正常に動作し\nますが、 のparseWith場合は常に失敗を返します\r\n