2011-11-20 9 views
25

Przykład problemu: Chcę napisać skrypt Haskell, które będą podświetlane (na przykład z \fbox) pierwsze wystąpienie symboli matematycznych w dokumencie. Mam nadzieję, że to pomoże mi upewnić się, że wszystko przedstawiłem.Czy istnieją jakieś techniki Haskell dla konstrukcji mieszanej (część, część niezmodyfikowanej tekst) analizowania i przepisywanie?

  • Regex są nieodpowiednie, gdyż nie będą wiedzieć, co jest w trybie matematyki, etc., a nie mają logiki liczyć rzeczy, lub wie, że zmienna od następnego \section jest rzeczywiście nowa zmienna .

  • Ja też nie chcę, aby napisać parser dla wszystkich lateksu. Wydaje się, że prawdopodobieństwo błędów jest wysoka, a ja tak naprawdę chcę napisać skrypt, a nie komercyjny program.

Napisałem mieszany parser - taki, który ma pewną strukturę i resztę zachował jako tekst, w odpowiedzi na pytanie tutaj. [How do you use parsec in a greedy fashion?]. Ale moje podejście było uciążliwe. Czy istnieje lepszy, bardziej formalny sposób?

+1

Nie bądź zbyt pochopny, aby zdyskwalifikować wyrażenie regularne - pamiętaj, że regex jest prawie zawsze osadzony w pełnym języku programowania (np. Haskell w tym przypadku), który może liczyć, dokonywać wyboru itp. Jak wspomniałem w drugim pytaniu, czym jesteś szukanie jest "parsowaniem wyspy", ale Haskell nie ma na to żadnych narzędzi i jeśli spróbujesz zrobić to z regularnym "analizowaniem", a nie dopasowaniem do wyrażenia regularnego, natychmiast masz problem z rozpoznawaniem początkowych i końcowych symboli, aby wejść i opuścić parsujące wyspy. –

Odpowiedz

2

Możesz chcieć rzucić okiem na Pandoc library on Hackage dla parsowania Latex. Pozwoli ci to parsować, modyfikować i ładnie drukować Latex, a także kilka innych formatów.