Semantyka i weryfikacja programów/Ćwiczenia 1

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania


Zawarto¶æ

Tematem tych zajêæ jest semantyka operacyjna wyra¿eñ (ma³e kroki).


Semantyka operacyjna wyra¿eñ

Ćwiczenie 1

Rozwa¿my bardzo prosty jêzyk wyra¿eñ, którego sk³adnia opisana jest nastêpuj±c± gramatyk±:

n::=0|1|

x::=(identyfikatory)

e::=n|x|e1+e2|𝐢𝐟e1𝐭𝐡𝐞𝐧e2𝐞𝐥𝐬𝐞e3

Wynikiem wyra¿enienia warunkowego 𝐢𝐟e1𝐭𝐡𝐞𝐧e2𝐞𝐥𝐬𝐞e3 jest warto¶æ wyra¿enia e2, o ile wyra¿enie e1 oblicza siê do warto¶ci ró¿nej od zera; w przeciwnym przypadku wynikiem jest warto¶æ wyra¿enia e3.

Zaproponuj semantykê operacyjn± (ma³e kroki) dla tego jêzyka.


Rozwiązanie

{{{3}}}


Ćwiczenie 2

Rozszerzmy jêzyk wyra¿eñ z poprzedniego zadania o jedn± konstrukcjê

e::=|𝐥𝐞𝐭x=e1𝐢𝐧e2

Wyra¿enie 𝐥𝐞𝐭x=e1𝐢𝐧e2 zawiera w sobie deklaracjê x=e1, która stanowi mechanizm wi±zania identyfikatorów w naszym jêzyku. Deklaracja x=e1 wprowadza now± zmienn± x oraz przypisuje jej warto¶æ. Warto¶æ wyra¿enia 𝐥𝐞𝐭x=e1𝐢𝐧e2 obliczamy nastêpuj±co: najpierw oblicza siê warto¶æ e1, podstawia j± na zmienna x, a nastêpnie oblicza wyra¿enie e2. Zakresem zmiennej x jest wyra¿enie e2, czyli wewn±trz e2 mo¿na odwo³ywaæ siê (wielokrotnie) do zmiennej x; Ogólniej, odwo³ania do zmiennej w wyra¿eniu odnosz± siê do najbli¿szej (najbardziej zagnie¿dzonej) deklaracji tej zmiennej. Taki mechanizm wi±zania identyfikatorów nazywamy wi±zaniem statycznym. Przyjmujemy zwyk³e (statyczne) regu³y przes³aniania zmiennych, np. je¶li w e2 wystêpuje podwyra¿enie 𝐥𝐞𝐭x=e𝐢𝐧e to deklaracja x=e przes³ania deklaracjê x=e1 w wyra¿eniu e.

Zak³adamy, ¿e na pocz±tku warto¶ci wszystkich zmiennych s± nieokre¶lone, czyli zmienne s± niezainicjowane, a odwo³anie do niezainicjowanej zmiennej jest uwa¿ane za niepoprawne.


Przykład

𝐥𝐞𝐭x=0𝐢𝐧𝐥𝐞𝐭y=7𝐢𝐧𝐥𝐞𝐭x=y+3𝐢𝐧x+x+ywynik=24

𝐥𝐞𝐭y=5𝐢𝐧𝐥𝐞𝐭x=(𝐥𝐞𝐭y=3𝐢𝐧y+y)𝐢𝐧x+ywynik=11

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \mathbf{let}\, z = 5 \,\mathbf{in}\, x+z \quad \quad \mapsto \quad \quad \mbox{brak wyniku; odwo³anie do niezainicjowanej zmiennej}\, x }

𝐥𝐞𝐭x=1𝐢𝐧𝐥𝐞𝐭x=x+x𝐢𝐧x+xwynik=4


Rozwiązanie

{{{3}}}


Zadania domowe

Ćwiczenie 1

Zapisz wariant 2 semantyki z poprzedniego zadania.


Ćwiczenie 2

Dotychczas wyst±pienie b³êdu podczas obliczania wyra¿enia, np. odwo³anie do niezainicjowanej zmiennej, powodowa³o, ¿e wyra¿enie nie posiada³o warto¶ci (nie by³o ci±gu tranzycji prowadz±cych do konfiguracji koñcowej). Zmodyfikuj któr±¶ z semantyk z poprzednich zadañ tak, aby b³±d by³ komunikowany jako jedna z konfiguracji koñcowych. To znaczy: je¶li obliczenie wyra¿enia e w stanie s jest niemo¿liwe bo wyst±pi³ b³±d, to

e,s*Blad.


Ćwiczenie 3

Rozwa¿ rozszerzenie jêzyka wyra¿eñ o wyra¿enia boolowskie:

n::=0|1|

x::=(identyfikatory)

b::=𝐭𝐫𝐮𝐞|𝐟𝐚𝐥𝐬𝐞|e1e2|¬b|b1b2

e::=n|x|e1+e2|𝐢𝐟b𝐭𝐡𝐞𝐧e2𝐞𝐥𝐬𝐞e3|𝐥𝐞𝐭x=e1𝐢𝐧e2

Zaproponuj semantykê ma³ych kroków dla tego jêzyka. Rozwa¿ ró¿ne strategie obliczania wyra¿eñ boolowskich, oraz podej¶cie leniwe. Na przyk³ad w strategii lewostronnej dla b1b2, gdy b1 zosta³o obliczone do 𝐟𝐚𝐥𝐬𝐞, w podej¶ciu leniwym nie ma wogóle potrzeby obliczania b2.