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?
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. –