Semantyka i weryfikacja programów/Ćwiczenia 3

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania


Zawarto¶æ

Koñczymy semantykê ma³ych kroków i rozpoczynamy semantykê naturaln± (du¿e kroki). Uzupe³nimy semantykê naturaln± jêzyka Tiny o semantykê naturaln± wyra¿eñ boolowskich i arytmetycznych oraz semantykê b³êdów wykonania. Wreszcie dodamy now± instrukcjê pêtli 𝐥𝐨𝐨𝐩 pozwalaj±c± na niestrukturalne przerwanie lub wznowienie iteracji (instrukcje 𝐞𝐱𝐢𝐭 i 𝐜𝐨𝐧𝐭𝐢𝐧𝐮𝐞).


Rozszerzenia semantyki jêzyka Tiny

Ćwiczenie 1

Zdefiniuj znaczenie wyra¿eñ boolowskich i arytmetycznych w jêzyku Tiny, w stylu du¿ych kroków (semantyka naturalna).


Rozwiązanie

{{{3}}}


Ćwiczenie 2

Rozwa¿ dodatkowo operacjê dzielenia:

e::=|e1/e2

i rozszerz semantykê z poprzedniego zadania. Dzielenie przez zero jest b³±dem i koñczy natychmiast wykonanie programu. Oprócz stanu wynikiem programu powinna byc informacja o b³êdzie, je¶li b³±d wyst±pi³.


Rozwiązanie

{{{3}}}


Ćwiczenie 3

Rozszerzmy jêzyk Tiny o nastêpuj±c± instrukcjê pêtli:

I::=𝐥𝐨𝐨𝐩I|𝐞𝐱𝐢𝐭|𝐜𝐨𝐧𝐭𝐢𝐧𝐮𝐞

𝐥𝐨𝐨𝐩I to instrukcja pêtli, I stanowi instrukcjê wewnêtrzn±. Instrukcja 𝐞𝐱𝐢𝐭 wychodzi z nabli¿szej otaczaj±cej pêtli 𝐥𝐨𝐨𝐩 i kontynuuje wykonanie programu od pierwszej instrukcji za t± pêtl±. Instrukcja 𝐜𝐨𝐧𝐭𝐢𝐧𝐮𝐞 powraca na pocz±tek instrukcji wewnêtrznej najbli¿szej otaczaj±cej pêtli 𝐥𝐨𝐨𝐩.

Pozwa¿ zarówno semantykê naturaln± jak i semantykê ma³ych kroków.


Rozwiązanie (semantyka naturalna)

{{{3}}}


Rozwiązanie (ma³e kroki)

{{{3}}}


Zadania domowe

Ćwiczenie 1

Zaproponuj semantykê ma³o-krokow± dla rozszerzeñ jêzyka Tiny, które studiowali¶my powy¿ej.


Ćwiczenie 2

Napisz semantyjê naturaln± dla nieznacznie rozszerzonej wersji instrukcji 𝐥𝐨𝐨𝐩:

I::=x:𝐥𝐨𝐨𝐩I|𝐞𝐱𝐢𝐭x|𝐜𝐨𝐧𝐭𝐢𝐧𝐮𝐞x

Identyfikator x pe³ni tutaj rolê etykiety zwi±zanej z instrukcj± 𝐥𝐨𝐨𝐩, jest te¿ parametrem dwóch pozosta³ych instrukcji. 𝐞𝐱𝐢𝐭x koñczy teraz najbli¿sz± otaczaj±c± pêtlê 𝐥𝐨𝐨𝐩 o etykiecie x. Podobnie 𝐜𝐨𝐧𝐭𝐢𝐧𝐮𝐞x wznawia najbli¿sz± otaczaj±c± pêtlê o etykiecie x.

Przykład

{{{3}}}

koñczy dzia³anie z warto¶ci± zmiennej a=3. Za pomoc± wciêæ okre¶lili¶my, do wnêtrza której pêtli 𝐥𝐨𝐨𝐩 nale¿y ka¿da z trzech ostatnich instrukcji przypisania. Niejednoznaczno¶æ bierze siê oczywi¶cie st±d, ¿e pracujemy ze sk³adni± abstrakcyjn±. Sk³adnia konkretna zawiera³aby prawdopodobnie jak±¶ konstukcjê zamykaj±c± pêtlê 𝐥𝐨𝐨𝐩, np. 𝐥𝐨𝐨𝐩I𝐞𝐧𝐝𝐥𝐨𝐨𝐩.


Ćwiczenie 3

Napisz semantykê naturaln± i ma³o-krokow± dla rozszerzenia jêzyka Tiny o wyra¿enia z efektami ubocznymi:

e::=|𝐝𝐨I𝐭𝐡𝐞𝐧e|x:=e|x++|

Obliczenie wyra¿enia 𝐝𝐨I𝐭𝐡𝐞𝐧e polega na wykonaniu I a potem na obliczeniu e. Warto¶æ wyra¿enia x:=e jest taka jak warto¶æ wyra¿enia e a efektem ubocznym jest podstawienie tej warto¶ci na zmienn± x.