SW wykład 5 - Slajd12: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Arturas (dyskusja | edycje)
Nie podano opisu zmian
Dorota (dyskusja | edycje)
Nie podano opisu zmian
 
(Nie pokazano 3 wersji utworzonych przez jednego użytkownika)
Linia 1: Linia 1:
{{Semantyka i weryfikacja programów/Wykład 5}}
{{Semantyka i weryfikacja programów/Wykład 5}}
[[Grafika:sw0511.png|center|frame]]
[[Grafika:sw0511.png|center|frame]]
Problem wiązania zmiennych i identyfikatorów w procedurach zilustrujmy
prościutkim przykładem. W powyższym programie w rozszerzonym języku
TINY musimy rozstrzygnąć, do której z deklaracji zmiennej <math>x</math> odnosi się
instrukcja przypisania na tę zmienna w ciele procedury <math>p</math> (z którą z
tych deklaracji należy związać wystąpienie zmiennej <math>x</math> w ciele
procedury <math>p</math> --- stąd terminologia).
Pierwsza możliwa strategia, przyjmowana chyba w większości
współczesnych języków programowania (choćby Pascal), to tak zwane
"wiązanie statyczne": zmienne (i identyfikatory procedur) w ciele
procedury wiążemy z ich deklaracjami widocznymi w miejscu deklaracji
procedury. Kolory w ramce po lewej stronie slajdu pokazują, jak
działa to w tym przykładowym programie. Wartością zmiennej <math>y</math> tuż przed
wyjściem z zewnętrznego bloku przy takim wiązaniu zmiennej <math>x</math> będzie
liczba <math>3</math>.
Druga możliwa strategia, przyjmowana także w niektórych językach
(począwszy od pierwszych wersji języka Lisp), to tak zwane "wiązanie
dynamiczne": zmienne (i identyfikatory procedur) w ciele procedury
wiążemy z ich deklaracjami widocznymi w miejscu wywołania procedury.
Kolory w ramce po prawej stronie slajdu pokazują, jak działa to w tym
przykładowym programie. Wartością zmiennej <math>y</math> tuż przed wyjściem z
zewnętrznego bloku przy takim wiązaniu zmiennej <math>x</math> będzie liczba <math>1</math>.
Zwróćmy jeszcze uwagę, że w tej wersji w miejscu deklaracji procedury
wykorzystywane w niej zmienne mogą wręcz nie być zadeklarowane, a
poszczególne wywołania procedury mogą odwoływać się do różnych
deklaracji wykorzystywanych w niej zmiennych. Może utrudnić to opis i
analizę deklarowanych procedur. Z drugiej strony, przy wiązaniu
statycznym, zmienne wykorzystywane w procedurze muszą być
zadeklarowane w miejscu deklaracji procedury. W każdym wywołaniu
procedury odwołujemy sie do tych właśnie, widocznych w tym miejscu
deklaracji. Systematyzuje to opis i analizę poszczególnych procedur.

Aktualna wersja na dzień 14:17, 29 wrz 2006

<<powrót do strony wykładu

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.

Problem wiązania zmiennych i identyfikatorów w procedurach zilustrujmy prościutkim przykładem. W powyższym programie w rozszerzonym języku TINY musimy rozstrzygnąć, do której z deklaracji zmiennej x odnosi się instrukcja przypisania na tę zmienna w ciele procedury p (z którą z tych deklaracji należy związać wystąpienie zmiennej x w ciele procedury p --- stąd terminologia).

Pierwsza możliwa strategia, przyjmowana chyba w większości współczesnych języków programowania (choćby Pascal), to tak zwane "wiązanie statyczne": zmienne (i identyfikatory procedur) w ciele procedury wiążemy z ich deklaracjami widocznymi w miejscu deklaracji procedury. Kolory w ramce po lewej stronie slajdu pokazują, jak działa to w tym przykładowym programie. Wartością zmiennej y tuż przed wyjściem z zewnętrznego bloku przy takim wiązaniu zmiennej x będzie liczba 3.

Druga możliwa strategia, przyjmowana także w niektórych językach (począwszy od pierwszych wersji języka Lisp), to tak zwane "wiązanie dynamiczne": zmienne (i identyfikatory procedur) w ciele procedury wiążemy z ich deklaracjami widocznymi w miejscu wywołania procedury. Kolory w ramce po prawej stronie slajdu pokazują, jak działa to w tym przykładowym programie. Wartością zmiennej y tuż przed wyjściem z zewnętrznego bloku przy takim wiązaniu zmiennej x będzie liczba 1.

Zwróćmy jeszcze uwagę, że w tej wersji w miejscu deklaracji procedury wykorzystywane w niej zmienne mogą wręcz nie być zadeklarowane, a poszczególne wywołania procedury mogą odwoływać się do różnych deklaracji wykorzystywanych w niej zmiennych. Może utrudnić to opis i analizę deklarowanych procedur. Z drugiej strony, przy wiązaniu statycznym, zmienne wykorzystywane w procedurze muszą być zadeklarowane w miejscu deklaracji procedury. W każdym wywołaniu procedury odwołujemy sie do tych właśnie, widocznych w tym miejscu deklaracji. Systematyzuje to opis i analizę poszczególnych procedur.