Czy jest możliwe jakoś uzyskać błąd parsowania jakiegoś niestandardowego typu? Byłoby fajnie, gdyby na przykład uzyskać więcej informacji o kontekście analizy z powodu błędu. I wydaje się, że nie jest zbyt wygodne, aby mieć informacje o błędzie tylko w formie wiadomości tekstowej.Parsera i niestandardowy błąd parsowania typ
Odpowiedz
Jak zauważa Rhymoid, niestety nie jest to możliwe.
Łącząc Parsec
z własnym Either
-jak monady nie pomoże, za - to wyjdzie zbyt wcześnie (nad Either
) lub zbyt późno (EitherT
nad).
Jeśli chcesz, możesz to zrobić w następujący sposób: użyj przez State (SourcePos, YourErrorType)
. (Nie można użyć stanu użytkownika Parsec, ponieważ wtedy błąd zostanie wycofany.)
Za każdym razem, gdy chcesz emitować strukturalną wartość błędu, zapisz ją w stanie z bieżącą lokalizacją, ale pod numerem tylko, jeśli obecna lokalizacja jest dalej niż zapisana. (Jeśli lokalizacje są równe, możesz jakoś scalić błędy. Może zachować ich listę.)
Wreszcie, po uruchomieniu monadowego stosu, otrzymasz ostateczny stan i ParseError
, który zawiera SourcePos
. Sprawdź, czy te dwie lokalizacje są zbieżne. Jeśli tego nie robią (tj. Numer SourcePos
Parsera jest dalej), to nie ma wartości błędu dla tego błędu.
- 1. Używanie Parsera do parsowania wyrażeń regularnych
- 2. Niestandardowy typ pliku i ikona
- 3. Błąd parsowania 'Gemfile'
- 4. Błąd parsera Angular2 nieoczekiwany token
- 5. Node.js Błąd parsowania JSON
- 6. SimpleDateFormat błąd parsowania
- 7. Błąd Parsowania Apache'a
- 8. główny błąd parsowania mod_auth_kerb
- 9. Szyny 3 i JSON: domyślny renderer ale niestandardowy typ MIME
- 10. Linter podaje błąd "Błąd parsowania adresu URL"
- 11. Android sdk main.out.xml błąd parsowania
- 12. Localizable.strings powodujące błąd parsowania plist
- 13. Jak utworzyć niestandardowy typ wejścia?
- 14. Jak zwrócić niestandardowy anonimowy typ?
- 15. dodać niestandardowy typ w Settings.settings
- 16. Monitorowanie postępu parsera Java SAX
- 17. Negowanie wewnętrznych zasad i parsera
- 18. Analizy parsowania Scala i HTML
- 19. Błąd GLSL # 132 Błąd składniowy: "gl_position", błąd parsowania
- 20. Wymyślić niestandardowy błąd sign_in
- 21. co to jest błąd parsowania i jak go naprawić
- 22. Niestandardowy UITableViewCell błąd
- 23. JPA niezależny niestandardowy typ mapowania/javax.persistence.x alternatywą org.hibernate.annotations.Type i org.hibernate.annotations.TypeDef
- 24. Zapytanie SQL o niestandardowy typ wpisu i wiele pól niestandardowych
- 25. Błąd parsowania podczas wywoływania [PFFacebookUtils initializeFacebook] - semaphore_wait_trap
- 26. ANTLR4 wzajemnie lewej rekurencyjne błąd podczas parsowania
- 27. Błąd parsowania pliku JSON z pakietem jsonlite
- 28. Błąd parsowania xml w liferay 6.1.1
- 29. Implementacja parsera
- 30. std :: get_time - Jak sprawdzić błąd parsowania
To nie wydaje się możliwe. ['Text.Parsec.Error'] (http://hackage.haskell.org/packages/archive/parsec/3.1.1/doc/html/Text-Parsec-Error.html) wydaje się podpowiadać, że każdy rodzaj błędu odpowiedzią jest ostatecznie 'String', a nawet [' (>) '] (http://hackage.haskell.org/packages/archive/parsec/3.1.1/doc/html/Text-Parsec-Prim.html #v: -60--63--62-) operator przyjmuje tylko łańcuchy. –
Po prostu: wynik błędu nie jest "tylko wiadomości tekstowej". Zawiera pozycję źródłową oraz informacje o tym, co parser spodziewał się zobaczyć i tak dalej. Ale tak, czasami byłoby miło uzyskać więcej ... – MathematicalOrchid