Semantyka i weryfikacja programów/Ćwiczenia 1
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±:
Wynikiem wyra¿enienia warunkowego jest warto¶æ wyra¿enia , o ile wyra¿enie oblicza siê do warto¶ci ró¿nej od zera; w przeciwnym przypadku wynikiem jest warto¶æ wyra¿enia .
Zaproponuj semantykê operacyjn± (ma³e kroki) dla tego jêzyka.
Rozwiązanie
Ćwiczenie 2
Rozszerzmy jêzyk wyra¿eñ z poprzedniego zadania o jedn± konstrukcjê
Wyra¿enie zawiera w sobie deklaracjê , która stanowi mechanizm wi±zania identyfikatorów w naszym jêzyku. Deklaracja wprowadza now± zmienn± oraz przypisuje jej warto¶æ. Warto¶æ wyra¿enia obliczamy nastêpuj±co: najpierw oblicza siê warto¶æ , podstawia j± na zmienna , a nastêpnie oblicza wyra¿enie . Zakresem zmiennej jest wyra¿enie , czyli wewn±trz mo¿na odwo³ywaæ siê (wielokrotnie) do zmiennej ; 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 wystêpuje podwyra¿enie to deklaracja przes³ania deklaracjê w wyra¿eniu .
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
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 }
Rozwiązanie
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 w stanie jest niemo¿liwe bo wyst±pi³ b³±d, to
Ćwiczenie 3
Rozwa¿ rozszerzenie jêzyka wyra¿eñ o wyra¿enia boolowskie:
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 , gdy zosta³o obliczone do , w podej¶ciu leniwym nie ma wogóle potrzeby obliczania .