2017-07-21 52 views
7

Zastanawiam się, czy istnieje standardowy, kanoniczny sposób w Haskell, aby pisać nie tylko parser dla określonego formatu pliku, ale także pisarz.Parsowanie i ładne drukowanie tego samego formatu pliku w Haskell

W moim przypadku należy przeanalizować plik danych do analizy. Jednakże symuluję również dane do analizy i zapisuję je w tym samym formacie pliku. Mógłbym teraz napisać parser używając Parsetu lub czegoś podobnego, a także napisać funkcje, które wykonują tekst w taki sposób, w jaki jest to potrzebne, ale gdy tylko zmienię format pliku, będę musiał zmienić dwie funkcje w moim kodzie. Czy istnieje lepszy sposób osiągnięcia tego celu?

Dziękuję Dominik

+1

Myślę, że najprościej byłoby zdefiniować typ danych reprezentujący składnię pliku, a następnie napisać osobny parser i ładną drukarkę, tak jak myślałeś. Właśnie to robi większość bibliotek językowych. – jozefg

+2

Oto kilka ostatnich istotnych tematów na Reddit: [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 ta technologia wciąż wydaje się dość eksperymentalna. –

+0

To, co chcesz zrobić, to zdefiniować gramatykę i użyć pewnej biblioteki do automatycznego wygenerowania analizatora składni i ładnej drukarki. Istnieje wiele bibliotek, które twierdzą, że są w stanie to zrobić, ale zalecając jeden jest prawdopodobnie OT (chciałbym, gdybym miał doświadczenie z którymkolwiek z nich). – jberryman

Odpowiedz

2

Pakiet BNFC-meta https://hackage.haskell.org/package/BNFC-meta-0.4.0.3

może być to, czego szukasz

„W szczególności, ze względu na LBNF gramatyki quasi-cytowany (używane przez BNF Converter) generuje (używając Template Haskell) parser LALR i całkiem ładną drukarkę dla tego języka. "

+0

Dziękuję bardzo za komentarze i odpowiedź. To jest rzeczywiście pojęcie/gramatyki/którego szukałem. Oprócz pakietu BNFC-meta, [drugi link] (https://www.reddit.com/r/haskell/comments/66o3lp/i_think_this_is_a_really_stupid_question_inverse/) Li-Yao Xia wspomina również o interesującej [składni] (https: //hackage.haskell.org/package/syntax) biblioteka. –