Pok-7-wyk-Slajd12

Z Studia Informatyczne
Wersja z dnia 19:18, 30 sie 2006 autorstwa Complak (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Atrybuty syntetyzowane – nieterminal L

Atrybuty syntetyzowane – nieterminal L


Funkcja implementująca nieterminal L ma jeden parametr – wskaźnik na zmienną length (atrybut syntetyzowany).

Po każdym wywołaniu funkcja sprawdza symbol widoczny na wejściu. Po natrafieniu na cyfrę binarną głowica jest przesuwana na kolejny symbol (wywołaniem LLread ()) i funkcja rekurencyjnie wywołuje samą siebie. Po powrocie z wywołania zostanie zwiększona wartość atrybutu length .

Po natrafieniu na koniec pliku (stała 0) atrybut length zostanie zainicjalizowany wartością 0 (długość ciągu pustego) i rozpocznie się powrót z rekurencji. Niestety, w etykiecie instrukcji switch nie można skorzystać ze stałej EOF , ponieważ w języku C ma ona wartość -1, a LEX sygnalizuje koniec pliku zwracając 0.

Wykorzystanie cech języka C umożliwiło łatwe wykonanie optymalizacji implementacji funkcji L. Ponieważ akcje semantyczne wykonywane po rozpoznaniu 0 i 1 były identyczne, więc można było wykorzystać ten sam kod w obu przypadkach (w Pascalu czy Adzie nie byłoby już to tak proste).


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