Semantyka i weryfikacja programów/Ćwiczenia 5

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania


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:

I::=|𝐟𝐨𝐫x=e1𝐭𝐨e2𝐭𝐫𝐲I1𝐞𝐥𝐬𝐞I2|𝐟𝐚𝐢𝐥

Znaczenie instrukcji 𝐟𝐨𝐫x=e1𝐭𝐨e2𝐭𝐫𝐲I1𝐞𝐥𝐬𝐞I2 jest nastêpuj±ce. Obliczamy warto¶ci wyra¿eñ e1 i e2. Je¶li pierwsza z nich jest mniejsza lub równa od drugiej, to podstawiamy pierwsz± warto¶æ (warto¶æ wyra¿enia e1) na zmienn± x i uruchamiamy I1. Je¶li w I1 nie zostanie napotkana instrukcja 𝐟𝐚𝐢𝐥, koñczymy instrukcjê 𝐟𝐨𝐫 i przyracamy warto¶æ zmiennej x sprzed tej instrukcji. Natomiast je¶li w I1 zostanie napotkana instrukcja 𝐟𝐚𝐢𝐥, podstawiamy na x kolejn±, o jeden wiêksz± warto¶æ, przywracamy warto¶ci wszystkich pozosta³ych zmiennych sprzed instrukcji 𝐟𝐨𝐫, i ponownie wykonujemy I1. Powtarzamy w ten sposób a¿ I1 zakoñczy siê nie napotkawszy 𝐟𝐚𝐢𝐥, albo warto¶æ zmiennej x przekroczy warto¶æ wyra¿enia e2 obliczon± na pocz±tku. W pierwszym przypadku koñczymy instrukcjê 𝐟𝐨𝐫 i przyracamy warto¶æ zmiennej x sprzed tej instrukcji. W drugim przywracamy warto¶ci wszystkich zmiennych sprzed instrukcji 𝐟𝐨𝐫 i uruchamiamy I2.


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: x=0,y=2,z=5.


Rozwiązanie

{{{3}}}


Semantyka naturalna bloków

Ćwiczenie 2 (bloki i deklaracje zmiennych)

Rozszerz semantykê jêzyka Tiny o deklaracjê zmiennej:

I::=|𝐛𝐞𝐠𝐢𝐧𝐯𝐚𝐫x=e;I𝐞𝐧𝐝

Zasiêgiem zmiennej x jest instrukcja I czyli wnêtrze bloku, w którym jest zadeklarowana. Zak³adamy zwyk³e (statyczne) regu³y widoczno¶ci, przes³aniania, itp.


Rozwiązanie

{{{3}}}

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 }

exc::=x|𝐚𝐧𝐲

Instrukcja 𝐭𝐡𝐫𝐨𝐰x oznacza podniesienie wyj±tku o nazwie x. Instrukcja I=𝐭𝐫𝐲I1𝐜𝐚𝐭𝐜𝐡excI2 wykonuje I1. Je¶li podczas wykonania I1 zostanie podniesiony wyj±tej x, i exc=x albo exc=𝐚𝐧𝐲, to nastêpuje przerwanie I1 i sterowanie zostaje przeniesione do I2 (nastêpuje obs³uga wyj±tku). Je¶li za¶ podczas wykonania I1 zostanie podniesiony wyj±tej x oraz excx i exc𝐚𝐧𝐲, to obs³uga wyj±tku przekazana jest do najbli¿szej instrukcji 𝐭𝐫𝐲 otaczaj±cej I. Umawiamy siê, ¿e 𝐭𝐫𝐲I1𝐜𝐚𝐭𝐜𝐡excI2 otacza I1 i wszystkie instrukcje wewn±trz I1, ale nie otacza I2.


Ć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.