Pok-7-wyk-Slajd23

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Obsługa błędów – gramatyka

Obsługa błędów – gramatyka


Język wejściowy jest językiem kontekstowym, więc nie da się go opisać gramatyką LL(1). Musimy zdefiniować gramatykę bezkontekstową opisującą szerszy język (zgodny z wyrażeniem regularnym a+b+c+), a następnie za pomocą akcji semantycznych sprawdzić, czy wejście jest poprawne.

Całe wejście (S) składa się z ciągu liter a (nieterminal A), ciągu liter b (nieterminal B) i ciągu liter c (nieterminal C). Nieterminale A, B i C mają atrybuty syntetyzowane len , w których będzie akumulowana długość ciągów poszczególnych liter. Po przetworzeniu całego wejścia porównywane są długości poszczególnych ciągów, jeśli są równe drukowany jest komunikat „OK”, jeśli są różne – komunikat „Error”.

Ciąg liter a (opisany nieterminalem A) składa się z pojedynczej litery a i reszty (RA). Rezultatem (atrybutem syntetyzowanym len symbolu A) będzie więc długość reszty (atrybutu length symbolu RA) powiększona o 1.

Reszta (RA) to albo litera a i dalszy ciąg reszty (RA1), albo napis pusty. W pierwszym przypadku rezultatem (atrybut length nieterminala RA) będzie długość reszty (atrybut length symbolu RA1) powiększona o 1, w drugim przypadku – bazowym – 0.

Nieterminale B (RB) i C (RC) mają (z dokładnością do rozpoznawanych znaków) identyczną definicję.


<< Poprzedni slajd | Spis treści | Następny slajd >>