SW wykład 7 - Slajd8

Z Studia Informatyczne
Wersja z dnia 15:52, 29 wrz 2006 autorstwa Dorota (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

<<powrót do strony wykładu

Kontynuacje Kontynuacje wyrażeń i deklaracji Tiny+++ Dziedziny semantyczne Funkcje semantyczne Przykłady klauzul [[SW_wykład_7_-_Slajd7|Przykłady klauzul, c.d.] Instrukcje Bloki Skoki Semantyka skoków Semantyka skoków, c.d. Semantyka skoków, c.d. Semantyka skoków, c.d. Semantyka "standardowa"

Tak jak przy wcześniejszych opisach semantyki języka TINY, najciekawszą częścią kontynuacyjnej semantyki języka jest funkcja semantyczna dla instrukcji. Powyżej podajemy klauzule semantyczne dla poszczególnych konstrukcji językowych budujących instrukcje, pomijając na chwilę instrukcję bloku. Omawiając te klauzule, niekiedy pozwalać sobie będziemy na nieformalny styl, odwołujący się do operacyjnych intuicji, często mieszając je z formalnym opisem znaczeń fraz języka jako matematycznych obiektów --- dobrze to chyba ilustruje powszechną praktykę, służącą jednak nie zastąpieniu formalnego opisu, ale zapewnieniu jego czytelności i ułatwieniu jego zrozumienia.

Instrukcja przypisania: jej znaczenie w danych środowiskach i przy danej kontynuacji ("za" tą instrukcją przypisania) określa kontynuację, która wylicza wartość przypisywanego wyrażenia w danym środowisku zmiennych i przekazuje tę wartość do kontynuacji dla wyrażeń, która dla danego stanu określa potok wyjściowy przez aplikację kontynuacji "za" daną instrukcją przypisania do odpowiednio zmodyfikowanego stanu.

Instrukcja pusta w danych środowiskach zmiennych i procedur pozostawia kontynuację bez zmian.

Instrukcja złożona w danym środowisku zmiennych i procedur określa przekształcenie kontynuacji będące złożeniem przekształceń określonych przez drugą i pierwszą składową w tychże środowiskach zmiennych i procedur (uwaga na kolejność złożenia: aby uniknąć niejasności, zapisaliśmy je wyżej przez wyraźną aplikację argumentów, bez operatora złożenia).

Instrukcja warunkowa w danym środowisku zmiennych i procedur, przy danej kontynuacji ("za" tą instrukcją warunkową) wylicza wartość wyrażenia logicznego w danym środowisku zmiennych i w kontynuacji dla wyrażeń (logicznych) opisującej dalszy przebieg obliczeń: w zależności od otrzymanej przez tę kontynuację dla wyrażeń wartości logicznej wybieramy odpowiednią gałąź instrukcji warunkowej dla określenia dalszego przebiegu obliczeń --- a raczej: dla określenia kontynuacji od punktu "przed" daną instrukcją warunkową.

Semantyka instrukcji pętli jest podobna --- dodatkowo jednak komplikuje się ona przez iterowanie pętli w przypadku, gdy wartość wyrażenia logicznego jest prawdą. Uchwycone jest to tu przez stałopunktową definicję odpowiedniej kontynuacji (od punktu "przed" daną instrukcją pętli) jako funkcji ze stanów w potoki wyjściowe.

Semantyka instrukcji wywołania procedury bezparametrowej nie wymaga komentarza: jak poprzednio, po prostu odwołuje się ona do znaczenia wywoływanej procedury zapamiętanego w środowisku procedur.

Podobnie dla instrukcji wywołania procedury z parametrem przekazywanym przez zmienną; znaczenie procedury jest wówczas dodatkowo aplikowane do lokacji przypisanej parametrowi aktualnemu w środowisku zmiennych.

Instrukcja wejścia: w danym środowisku zmiennych i procedur, przy danej kontynuacji ("za" tą instrukcją wejścia) określa ona kontynuację, która otrzymując stan ("przed" tą instrukcją wejścia) przekazuje do danej kontynuacji "za" tą instrukcją stan, w którym skład zostaje zmodyfikowany przez przypisanie pierwszej liczby z potoku wejściowego tej lokacji, którą w środowisku oznacza zmienna, na którą wczytujemy, i w którym z potoku wejściowego odrzucamy tę pierwszą, właśnie wczytaną liczbę.

Instrukcja wyjścia: w danym środowisku zmiennych i procedur, przy danej kontynuacji ("za" tą instrukcją wyjścia), oblicza wartość wypisywanego na wyjście wyrażenia arytmetycznego przy danym środowisku zmiennych i kontynuacji dla wyrażeń, która wyliczoną wartość przekazuje do kontynuacji, która dla dowolnego stanu buduje oczekiwany potok wyjściowy. Jego pierwszym elementem jest właśnie wypisana na wyjście liczba, a ciąg dalszy określony jest przez kontynuację "za" tą instrukcją dla tegoż stanu.

W powyższych opisach pomijaliśmy możliwość wystąpienia błędów; jeśli to nastąpi, to wynikiem jest potok wyjściowy bez liczb, a ze wskaźnikiem błędu.