SW wykład 6 - Slajd11: 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 6}}
[[Grafika:sw0610.png|center|frame]]
[[Grafika:sw0610.png|center|frame]]
Zmieniamy też w dość oczywisty sposób funkcję semantyczną dla
instrukcji: w danym środowisku zmiennych i procedur wyznacza ona
przekształcenie stanów w stany (dopuszczając możliwości sygnalizacji
błędu). Znów jednak większość klauzul dla konstrukcji budujących
instrukcje zachowuje dotyczczasową postać, operując na stanach
dokładnie tak, jak dotychczas na składach. Warto może przejrzeć kilka
tych klauzul, by przekonać się, że rzeczywiście nie wymagają one
zmiany.
Wyjątkiem są tu oczywiście klauzule, które bezpośrednio modyfikują
składy lub wykorzystują je istotnie jako funkcje. Dotyczy to
deklaracji zmiennych, deklaracji i wywołań procedur z parametrami, a
przede wszystkim klauzuli dla instrukcji przypisania. Modyfikacje te
jednak są proste: operacje na składach w poprzednich klauzulach trzeba
tu po prostu powtórzyć, wydobywając skład ze struktury stanu i
odpowiednio umieszczając go znów w tej strukturze. Pozostałe składowe
stanu nie ulegają tu zmianie.
Oczywiście, dodajemy też klauzule dla instrukcji wejścia i wyjścia,
które właśnie służą modyfikacji tych dwóch składowych stanów.
Semantyka instrukcji wejścia jest oczywista. W danym środowisku i
stanie najpierw wydobywamy ze środowiska lokację zmiennej, na którą
chcemy wczytać wartość liczbową z wejścia. Następnie wyodrębniamy z
potoku wejściowego pierwszy element i resztę tego potoku. Wynikiem
jest stan, w którym modyfikujemy skład przez przypisanie wydobytej
lokacji pierwszego elementu wejścia, potok wejściowy zastępujemy jego
resztą, a potok wyjściowy pozostaje bez zmiany. Oczywiście, jeśli
zmienna w danym środowisku nie oznacza lokacji, albo z potoku
wejściowego nie da się wydobyć pierwszego elementu, to generowany jest
sygnał błędu.
Jeszcze prostsza jest semantyka instrukcji wyjścia: w danym środowisku
i stanie wyliczamy wartość wyrażenia i tę wartość dopisujemy do
potoku wyjściowego w wynikowym stanie, jego skład i potok wejściowy
pozostawiając niezmienione.

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

<<powrót do strony wykładu

Parametry Semantyka procedur Semantyka procedur, c.d. Semantyka procedur bezparametrowych Przekazywanie przez zmienną Przekazywanie przez wartość Przekazywanie przez nazwę Wejście/wyjście Semantyka wejścia/wyjścia Semantyka wejścia/wyjścia, c.d. Semantyka wejścia/wyjścia, c.d. Programy Problem Nowe podejście Kontynuacje

Zmieniamy też w dość oczywisty sposób funkcję semantyczną dla instrukcji: w danym środowisku zmiennych i procedur wyznacza ona przekształcenie stanów w stany (dopuszczając możliwości sygnalizacji błędu). Znów jednak większość klauzul dla konstrukcji budujących instrukcje zachowuje dotyczczasową postać, operując na stanach dokładnie tak, jak dotychczas na składach. Warto może przejrzeć kilka tych klauzul, by przekonać się, że rzeczywiście nie wymagają one zmiany.

Wyjątkiem są tu oczywiście klauzule, które bezpośrednio modyfikują składy lub wykorzystują je istotnie jako funkcje. Dotyczy to deklaracji zmiennych, deklaracji i wywołań procedur z parametrami, a przede wszystkim klauzuli dla instrukcji przypisania. Modyfikacje te jednak są proste: operacje na składach w poprzednich klauzulach trzeba tu po prostu powtórzyć, wydobywając skład ze struktury stanu i odpowiednio umieszczając go znów w tej strukturze. Pozostałe składowe stanu nie ulegają tu zmianie.

Oczywiście, dodajemy też klauzule dla instrukcji wejścia i wyjścia, które właśnie służą modyfikacji tych dwóch składowych stanów.

Semantyka instrukcji wejścia jest oczywista. W danym środowisku i stanie najpierw wydobywamy ze środowiska lokację zmiennej, na którą chcemy wczytać wartość liczbową z wejścia. Następnie wyodrębniamy z potoku wejściowego pierwszy element i resztę tego potoku. Wynikiem jest stan, w którym modyfikujemy skład przez przypisanie wydobytej lokacji pierwszego elementu wejścia, potok wejściowy zastępujemy jego resztą, a potok wyjściowy pozostaje bez zmiany. Oczywiście, jeśli zmienna w danym środowisku nie oznacza lokacji, albo z potoku wejściowego nie da się wydobyć pierwszego elementu, to generowany jest sygnał błędu.

Jeszcze prostsza jest semantyka instrukcji wyjścia: w danym środowisku i stanie wyliczamy wartość wyrażenia i tę wartość dopisujemy do potoku wyjściowego w wynikowym stanie, jego skład i potok wejściowy pozostawiając niezmienione.