Semantyka i weryfikacja programów/Ćwiczenia 9: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 43: | Linia 43: | ||
</math> | </math> | ||
Deklaracja <math>\mathbf{var}\, x := e</math> wprowadza zmienną | Deklaracja <math>\mathbf{var}\, x := e</math> wprowadza zmienną <math>x</math> i nadaje jej | ||
wartość obliczonego wyrażenia | wartość obliczonego wyrażenia <math>e</math>. Deklaracja <math>\mathbf{proc}\, P (x); i\, \mathbf{endproc} | ||
</math> wprowadza procedurę o nazwie | </math> wprowadza procedurę o nazwie <math>P</math> z jednym parametrem <math>x</math> przekazywanym | ||
przez zmienną. Treścią procedury jest instrukcja | przez zmienną. Treścią procedury jest instrukcja <math>i</math>. | ||
Instrukcja bloku <math>\mathbf{begin}\, d; i\,\mathbf{end}</math> polega na | Instrukcja bloku <math>\mathbf{begin}\, d; i\,\mathbf{end}</math> polega na | ||
wykonaniu instrukcji | wykonaniu instrukcji <math>i</math> po uprzednim wzbogaceniu środowiska deklaracją <math>d</math>. | ||
Wszystkie zmienne i procedury wprowadzone przez | Wszystkie zmienne i procedury wprowadzone przez <math>d</math> są lokalne w bloku. | ||
Instrukcja <math>\mathbf{call}\, P (x) </math> to wywołanie procedury | Instrukcja <math>\mathbf{call}\, P (x) </math> to wywołanie procedury <math>P</math>. | ||
=== Zadanie 2 === | === Zadanie 2 === |
Wersja z 14:59, 29 wrz 2006
Procedury i funkcje. Przekazywanie parametrów.
Zadanie 1
Zdefiniuj semantykę denotacyjną następującego języka:
Deklaracja wprowadza zmienną i nadaje jej wartość obliczonego wyrażenia . Deklaracja wprowadza procedurę o nazwie z jednym parametrem przekazywanym przez zmienną. Treścią procedury jest instrukcja .
Instrukcja bloku polega na wykonaniu instrukcji po uprzednim wzbogaceniu środowiska deklaracją . Wszystkie zmienne i procedury wprowadzone przez są lokalne w bloku. Instrukcja to wywołanie procedury .
Zadanie 2
Jaką wartość ma zmienna z przy semantyce z poprzedniego zadania po wykonaniu następującej instrukcji:
begin var y := 1; proc P (x); x := y endproc; begin var y := 2; var z := 0; call P(z); end end
Zadanie 3
Wyjaśnij różnicę między wiązaniami statycznymi a dynamicznymi. Zmień semantykę języka z zadania 1 tak, aby uzyskać dynamiczne wiązania identyfikatorów.
Zadanie 4
Czy semantyka z zadania 1 umożliwia pisanie procedur rekurencyjnych? A semantyka z zadania 3? Jak należy zmienić semantykę, aby procedury rekurencyjne były możliwe?
Zadanie 5
Przypuśćmy, że składnia wywołania procedury z zadania 1 przyjmuje teraz postać:
Pozostałe elementy nie zmieniają się. Przekazywanie parametrów odbywa się teraz jednak przez wartość. Opisz semantykę takiego języka. Zadbaj o możliwość definiowania procedur rekurencyjnych i statyczne wiązania zmiennych globalnych.