Semantyka i weryfikacja programów/Ćwiczenia 5
Zawarto¶æ
Kontynuujemy æwiczenie semantyki naturalnej, dodaj±c pewne konstrukcje do jêzyka Tiny. W szczególno¶ci rozszerzymy go o deklaracje zmiennych (bloki). Po raz pierwszy roszdzielimy informacjê przechowywan± w konfiguracji na ¶rodowisko okre¶laj±ce wi±zanie identyfikatorów i stan przechowuj±cy warto¶ci zmiennych. Bêdzie to przygotowanie do kolejnych zajêæ.
Semantyka naturalna pewnej instrukcji
Ćwiczenie 1
Rozszerzamy jêzyk Tiny nastêpuj±co:
Znaczenie instrukcji jest nastêpuj±ce. Obliczamy warto¶ci wyra¿eñ i . Je¶li pierwsza z nich jest mniejsza lub równa od drugiej, to podstawiamy pierwsz± warto¶æ (warto¶æ wyra¿enia ) na zmienn± i uruchamiamy . Je¶li w nie zostanie napotkana instrukcja , koñczymy instrukcjê i przyracamy warto¶æ zmiennej sprzed tej instrukcji. Natomiast je¶li w zostanie napotkana instrukcja , podstawiamy na kolejn±, o jeden wiêksz± warto¶æ, przywracamy warto¶ci wszystkich pozosta³ych zmiennych sprzed instrukcji , i ponownie wykonujemy . Powtarzamy w ten sposób a¿ zakoñczy siê nie napotkawszy , albo warto¶æ zmiennej przekroczy warto¶æ wyra¿enia obliczon± na pocz±tku. W pierwszym przypadku koñczymy instrukcjê i przyracamy warto¶æ zmiennej sprzed tej instrukcji. W drugim przywracamy warto¶ci wszystkich zmiennych sprzed instrukcji i uruchamiamy .
Przykład
Oto przyk³adowy program:
x := 0; y := 1; x := 1 \,\mathbf{to}\, 5 y := y+1; x <= 4 z:= x
Warto¶ci zmiennych po zakoñczeniu programu to: .
Rozwiązanie
Semantyka naturalna bloków
Ćwiczenie 2 (bloki i deklaracje zmiennych)
Rozszerz semantykê jêzyka Tiny o deklaracjê zmiennej:
Zasiêgiem zmiennej jest instrukcja czyli wnêtrze bloku, w którym jest zadeklarowana. Zak³adamy zwyk³e (statyczne) regu³y widoczno¶ci, przes³aniania, itp.
Rozwiązanie
Zadania domowe
Ćwiczenie 1
Napisz semantykê naturaln± dla nastêpuj±cego rozszerzenia jêzyka Tiny:
Parser nie mógł rozpoznać (nieznana funkcja „\ldotes”): {\displaystyle I \, ::= \,\, \ldotes \,\,|\,\, \mathbf{throw}\, x \,\,|\,\, \,\mathbf{try}\, I_1 \,\mathbf{catch}\, exc\, I_2 }
Instrukcja oznacza podniesienie wyj±tku o nazwie . Instrukcja wykonuje . Je¶li podczas wykonania zostanie podniesiony wyj±tej , i albo , to nastêpuje przerwanie i sterowanie zostaje przeniesione do (nastêpuje obs³uga wyj±tku). Je¶li za¶ podczas wykonania zostanie podniesiony wyj±tej oraz i , to obs³uga wyj±tku przekazana jest do najbli¿szej instrukcji otaczaj±cej . Umawiamy siê, ¿e otacza i wszystkie instrukcje wewn±trz , ale nie otacza .
Ćwiczenie 2
Zaproponuj modyfikacjê semantyki, w której deklaracja jest wykonywana ,,równolegle", analogicznie do przypisania równoleg³ego. Przy takiej semantyce kolejno¶æ poszczególnych deklaracji powinna byæ nieistotna.