2015-09-27 6 views
5

それは構文解析を停止した後にParsecのからTE残りの入力を取得する方法があります場合、私はそれが成功したか失敗した解析、多分この署名したいずれかの場合には、思っていた:我々が得るParsecのの左入力ゲット

parseRemaining :: Stream s Identity t => Parsec s() a -> SourceName -> s -> (s, Either ParseError a) 

Either ParseError aの代わりに、残りの文字列を追加します。Stream s

+1

attoparsecの使用を検討すると、はるかに高速で部分一致がサポートされます。 – arrowd

+0

大きなファイルやそのようなものを解析しているわけではありません。理解しているように、Parsecはより簡単なインターフェイス*を提供しています。私は[この回答]のためにParsecを使用します。(0120-18753-03) – chamini2

答えて

0

Megaparsec を見てみましょう - Parsecの現代のフォークを、バージョンから始まることは、それはパースの先頭に カスタム状態を供給することができます4.2.0最後にパーサの状態を抽出します(パーサが成功するか失敗するかは関係ありません。 )。 runParser' および runParserT'などを参照して、 などの入力を部分的に解析し、解析を再開し、


開示:私はMegaparsecの著者の一人です。

+0

私はこの機能を求めていましたが、私はそれを使用しています。 – chamini2

1

getInputは、残りの入力を返すパーサーです。

+0

これは、成功するパーズでのみ入力を取得するために機能します。どちらの場合でも入力を得る方法が欲しいです。 – chamini2

0

私はParsecの内部にビットを掘り、状態情報(ストリームを含む)を簡単に回復する方法を見つけることができませんでした。

アドホックな解決策は、受信したエラーを調べて、その場所情報を使用して解析がどこで停止したのかを推測することです。 (あなたのストリームがシークをサポート場合はもちろん、これはのみ動作します。)