SW wykład 5 - Slajd12: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
(Nie pokazano 1 wersji utworzonej przez jednego użytkownika) | |||
Linia 4: | Linia 4: | ||
Problem wiązania zmiennych i identyfikatorów w procedurach zilustrujmy | Problem wiązania zmiennych i identyfikatorów w procedurach zilustrujmy | ||
prościutkim przykładem. W powyższym programie w rozszerzonym języku | prościutkim przykładem. W powyższym programie w rozszerzonym języku | ||
TINY musimy rozstrzygnąć, do której z deklaracji zmiennej | TINY musimy rozstrzygnąć, do której z deklaracji zmiennej <math>x</math> odnosi się | ||
instrukcja przypisania na tę zmienna w ciele procedury p (z którą z | instrukcja przypisania na tę zmienna w ciele procedury <math>p</math> (z którą z | ||
tych deklaracji należy związać wystąpienie zmiennej x w ciele | tych deklaracji należy związać wystąpienie zmiennej <math>x</math> w ciele | ||
procedury p --- stąd terminologia). | procedury <math>p</math> --- stąd terminologia). | ||
Pierwsza możliwa strategia, przyjmowana chyba w większości | Pierwsza możliwa strategia, przyjmowana chyba w większości | ||
Linia 14: | Linia 14: | ||
procedury wiążemy z ich deklaracjami widocznymi w miejscu deklaracji | procedury wiążemy z ich deklaracjami widocznymi w miejscu deklaracji | ||
procedury. Kolory w ramce po lewej stronie slajdu pokazują, jak | procedury. Kolory w ramce po lewej stronie slajdu pokazują, jak | ||
działa to w tym przykładowym programie. Wartością zmiennej y tuż przed | 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 x będzie | wyjściem z zewnętrznego bloku przy takim wiązaniu zmiennej <math>x</math> będzie | ||
liczba 3. | liczba <math>3</math>. | ||
Druga możliwa strategia, przyjmowana także w niektórych językach | Druga możliwa strategia, przyjmowana także w niektórych językach | ||
Linia 23: | Linia 23: | ||
wiążemy z ich deklaracjami widocznymi w miejscu wywołania 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 | 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 | przykładowym programie. Wartością zmiennej <math>y</math> tuż przed wyjściem z | ||
zewnętrznego bloku przy takim wiązaniu zmiennej x będzie liczba 1. | 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 | Zwróćmy jeszcze uwagę, że w tej wersji w miejscu deklaracji procedury | ||
wykorzystywane w niej zmienne mogą wręcz nie być zadeklarowane, a | wykorzystywane w niej zmienne mogą wręcz nie być zadeklarowane, a | ||
poszczególne wywołania procedury mogą odwoływać się do różnych | poszczególne wywołania procedury mogą odwoływać się do różnych |
Aktualna wersja na dzień 14:17, 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.

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 odnosi się instrukcja przypisania na tę zmienna w ciele procedury (z którą z tych deklaracji należy związać wystąpienie zmiennej w ciele procedury --- 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 tuż przed wyjściem z zewnętrznego bloku przy takim wiązaniu zmiennej będzie liczba .
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 tuż przed wyjściem z zewnętrznego bloku przy takim wiązaniu zmiennej będzie liczba .
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.