Pok-7-wyk-Slajd27
Obsługa błędów – nieterminal A
W trakcie implementowania funkcji dla każdego nieterminala osobno należy rozważyć akcje dla poprawnego wejścia i dla błędów.
Jakość detekcji i sygnalizacji błędów będzie zależeć od staranności analizy przeprowadzonej na tym etapie. Najprostszym rozwiązaniem jest oczywiście natychmiastowe przerwanie działania z komunikatem o błędzie. Ilość i jakość informacji o błędzie jaka zostaje przekazana użytkownikowi jest wtedy minimalna.
Dodanie kodu diagnostyki błędów zdecydowanie powiększa rozmiar analizatora, co widać w przedstawionym przykładzie (kod zaznaczony na czerwono służy do obsługi błędów). W analizatorze przedstawiono jedną z możliwych interpretacji błędów – nie w każdym przypadku da się jednoznacznie określić na czym polegał i w którym miejscu wystąpił błąd.
Funkcja implementująca nieterminal A podgląda jeden symbol z wejścia, którym może być:
- litera a – wejście jest poprawne, przesuwamy głowicę, wywołujemy funkcję RA w celu obliczenia długości reszty ciągu, po powrocie zwiększamy długość o 1 (znak, który odczytaliśmy przed wywołaniem funkcji)
- litery b i c – wejście jest błędne, zabrakło litery a, drukujemy komunikat diagnostyczny i powracamy z funkcji
- koniec pliku – wejście jest puste, dalsza diagnostyka nie ma sensu, drukujemy komunikat i przerywamy program
- dowolny inny znak – w pliku są znaki spoza zbioru rozpoznawanych znaków, również nie ma sensu kontynuować analizy, drukujemy komunikat i przerywamy program