2015-09-27 12 views
5

Ayrıştırma durduktan sonra Parsec gelen te kalan girişini almak için bir yol varsa bunu başarılı veya başarısız ayrıştırma, belki bu imza oldu ya eğer merak ediyorum: aldığımızparsekten sol girdi alın

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

yerine Either ParseError a nedeniyle, ayrıca kalan Stream s

+1

Attoparsec'i kullanmayı düşünün, çok daha hızlıdır ve kısmi eşleşmeleri destekler. – arrowd

+0

Büyük dosyaları veya bunun gibi bir şeyi ayrıştırmadım ve anladığım kadarıyla, Parsec daha kolay bir * arabirim * sunuyor. Parsec'i [bu cevap] 'dan dolayı kullanıyorum (http://stackoverflow.com/a/19213247/1276441) – chamini2

cevap

0

Megaparsec bir göz atın - sürümünden itibaren bu ayrıştırma başında özel durumunu tedarik sağlar 4.2.0, Parsec modern bir çatal sonunda ayrıştırıcı durumunu ayıklayın (çözümleyici başarılı veya başarısız olursa 'un önemi yoktur). Bu, kısmen, ayrıştırma devam, giriş ayrıştırmak standart olmayan ilk metin konumunu, vb bakınız sağlar runParser' ve runParserT'.


Açıklama: Megaparsec'in yazarlarından biriyim.

+0

Bu özelliği isteyen kişi bendim, onu kullanıyorum. – chamini2

1

kalan girdi döndüren bir ayrıştırıcısıdır getInput kullanabilirsiniz olsun.

+0

Bu, yalnızca başarılı olan ayrıştırmalarda girdi almak için çalışır. Her iki durumda da girişi almak için bir yol istiyorum. – chamini2

0

Parsec'in dahili bölümlerine biraz kazdım ve durum bilgisini (akışını içeren) kurtarmanın kolay bir yolunu bulamadım.

Özel bir çözüm, aldığınız hatayı incelemek ve ardından ayrıştırma işleminin nerede durdurulduğunu bulmak için konum bilgilerini kullanmak olacaktır. (Akışınız arayan destekler eğer Tabii ki, bu sadece çalışacak.)