2017-07-21 60 views
7

Haskell'de standart, standart bir kural varsa, sadece belirli bir dosya formatı için bir ayrıştırıcı değil, aynı zamanda bir yazar yazmayı da merak ediyorum. Benim durumumda, analiz için bir veri dosyasını ayrıştırmam gerekiyor. Bununla birlikte, analiz edilecek verileri simüle ediyorum ve aynı dosya biçiminde kaydediyorum. Şimdi Parsec'i veya eşdeğer bir şeyi kullanarak bir ayrıştırıcı yazabilirim ve ayrıca metin çıktısını gereken şekilde gerçekleştiren işlevler yazabilirim, ancak dosya formatımı değiştirdiğimde, kodumdaki iki işlevi değiştirmem gerekir. Bu hedefe ulaşmak için daha iyi bir yolu var mı? Haskell'de aynı dosya formatını ayrıştırma ve güzel yazdırma

Dominik

+1

Yapmanız gereken en basit şey, dosyanızın sözdizimini temsil eden bir veri türü tanımlamak ve düşündüğünüz gibi ayrı bir ayrıştırıcı ve güzel bir yazıcı yazmak olacaktır. Çoğu dil kütüphanesi budur. – jozefg

+2

Reddit ile ilgili güncel yeni konular: [1] (https://www.reddit.com/r/haskell/comments/6aqvgj/parser_libraries_with_ast_output/), [2] (https://www.reddit.com/ r/haskell/comments/66o3lp/i_think_this_is_a_really_stupid_question_inverse /) IMO bu teknoloji hala oldukça deneysel görünüyor. –

+0

Yapmak istediğiniz şey bir dilbilgisi tanımlamak ve bir ayrıştırıcı ve güzel yazıcıyı otomatik olarak oluşturmak için bazı kütüphaneleri kullanmaktır. Bunu yapabildiğini iddia eden bir kaç kütüphane var, ancak bir tane tavsiye etmek muhtemelen OT (Ben bunlardan herhangi biriyle deneyimim olsaydı) – jberryman

cevap

2

, BNFC-meta paketi teşekkür ederiz https://hackage.haskell.org/package/BNFC-meta-0.4.0.3

aradığınız şey olabilir

"BNF Converter tarafından kullanıldığı gibi Özellikle, (yarı-alıntılanan LBNF dilbilgisi verilen) bir LALR ayrıştırıcısını (Template Haskell'i kullanarak) ve dil için oldukça güzel bir yazıcıyı üretir.

+0

Yorumlar ve cevabınız için çok teşekkür ederim. Gerçekten aradığım bir/grammar/kavramdır. BNFC-meta paketinin dışında, Li-yao Xia'nun [ikinci link] (https://www.reddit.com/r/haskell/comments/66o3lp/i_think_this_is_a_really_stupid_question_inverse/) de ilginç [sözdizimi] (https: //hackage.haskell.org/package/syntax) kütüphanesi. –

İlgili konular