SW wykład 5 - Slajd1: Różnice pomiędzy wersjami
Nie podano opisu zmian |
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 5}} | |||
[[Grafika:sw0500.png|center|frame]] | [[Grafika:sw0500.png|center|frame]] | ||
Przedstawiona w poprzednim module semantyka języka TINY pokazała tylko | |||
naprawdę najprostsze idee i techniki semantyki denotacyjnej. Nic w tym | |||
dziwnego: sam język był bardzo prościutki. Przedstawimy teraz kolejno | |||
kilka wzbogaceń języka TINY, rozszerzając go o kolejne konstrukcje | |||
językowe. Wykorzystamy to do pokazania standardowych metod opisu | |||
semantyki (denotacyjnej) dla tych konstrukcji. Z jednej strony | |||
dostarczy to kilku podstawowych narzędzi dla opisu znanych i | |||
oczekiwanych konstrukcji językowych, do których można się wprost | |||
odwoływać budując semantykę bardziej złożonych i bliższych praktyce | |||
języków. Z drugiej zaś, ilustrować to będzie kierunki możliwych | |||
modyfikacji i rozszerzania denotacyjnego podejścia do opisu semantyki | |||
języków programowania. | |||
Zaczniemy od jednego z najbardziej oczywistych, powszechnie znanych i | |||
stosowanych rozszerzeń: wprowadzamy do języka TINY bloki z | |||
deklaracjami lokalnych zmiennych. Rozszerzamy syntaktykę języka TINY, | |||
dodając nową konstrukcję dla instrukcji: instrukcję bloku, która | |||
składa się z ciągu deklaracji zmiennych i z instrukcji --- ciała bloku | |||
--- wspólnie ujętych w "nawiasy" <b>begin</b> ... <b>end</b>. Dodajemy | |||
więc też nową kategorię składniową: deklaracje zmiennych, które są po | |||
prostu ciągami (być może pustymi) nazw deklarowanych zmiennych | |||
(opatrzonych słowem kluczowym <b>var</b>). Deklaracja zmiennej w bloku | |||
udostępnia ją instrukcji ciała tego bloku i jest niewidoczna na | |||
zewnątrz. Zatem jej modyfikacje nie mają bezpośredniego wpływu na | |||
wartości zmiennych wcześniej zadeklarowanych. W szczególności, jeśli | |||
zmienna o tej samej nazwie była już uprzednio zadeklarowana, to ta | |||
"zewnętrzna" zmienna przestaje być czasowo widoczna we wnętrzu bloku | |||
--- a pojawia się niejako ponownie po zakończeniu realizacji tego | |||
bloku. |
Aktualna wersja na dzień 13:36, 29 wrz 2006
Bloki i deklaracje Lokacje Funkcje semantyczne Konwencje notacyjne Instrukcje Klauzule semantyczne Klauzule semantyczne, c.d. Deklaracje Deklaracje, c.d. Semantyka bloków Procedury Wiązania zmiennych Semantyka Tiny++ Semantyka Tiny++ Rekurencja Semantyka procedur rek. Semantyka procedur rek.

Przedstawiona w poprzednim module semantyka języka TINY pokazała tylko naprawdę najprostsze idee i techniki semantyki denotacyjnej. Nic w tym dziwnego: sam język był bardzo prościutki. Przedstawimy teraz kolejno kilka wzbogaceń języka TINY, rozszerzając go o kolejne konstrukcje językowe. Wykorzystamy to do pokazania standardowych metod opisu semantyki (denotacyjnej) dla tych konstrukcji. Z jednej strony dostarczy to kilku podstawowych narzędzi dla opisu znanych i oczekiwanych konstrukcji językowych, do których można się wprost odwoływać budując semantykę bardziej złożonych i bliższych praktyce języków. Z drugiej zaś, ilustrować to będzie kierunki możliwych modyfikacji i rozszerzania denotacyjnego podejścia do opisu semantyki języków programowania.
Zaczniemy od jednego z najbardziej oczywistych, powszechnie znanych i stosowanych rozszerzeń: wprowadzamy do języka TINY bloki z deklaracjami lokalnych zmiennych. Rozszerzamy syntaktykę języka TINY, dodając nową konstrukcję dla instrukcji: instrukcję bloku, która składa się z ciągu deklaracji zmiennych i z instrukcji --- ciała bloku --- wspólnie ujętych w "nawiasy" begin ... end. Dodajemy więc też nową kategorię składniową: deklaracje zmiennych, które są po prostu ciągami (być może pustymi) nazw deklarowanych zmiennych (opatrzonych słowem kluczowym var). Deklaracja zmiennej w bloku udostępnia ją instrukcji ciała tego bloku i jest niewidoczna na zewnątrz. Zatem jej modyfikacje nie mają bezpośredniego wpływu na wartości zmiennych wcześniej zadeklarowanych. W szczególności, jeśli zmienna o tej samej nazwie była już uprzednio zadeklarowana, to ta "zewnętrzna" zmienna przestaje być czasowo widoczna we wnętrzu bloku --- a pojawia się niejako ponownie po zakończeniu realizacji tego bloku.