SW wykład 7 - Slajd8: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Mengel (dyskusja | edycje)
Nie podano opisu zmian
 
Dorota (dyskusja | edycje)
Nie podano opisu zmian
 
(Nie pokazano 2 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
{{Semantyka i weryfikacja programów/Wykład 7}}
[[Grafika:sw0707.png|center|frame]]
[[Grafika:sw0707.png|center|frame]]
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.

Aktualna wersja na dzień 15:52, 29 wrz 2006

<<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.