Semantyka i weryfikacja programów/Ćwiczenia 3: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 422: | Linia 422: | ||
nie ma możliwości wygenerowania śladu. | nie ma możliwości wygenerowania śladu. | ||
Zauważmy, że nasze reguły nie pozwalają na dodanie drugiego | Zauważmy, że nasze reguły nie pozwalają na dodanie drugiego (kolejnego) śladu! | ||
(kolejnego) śladu! | |||
Linia 559: | Linia 558: | ||
a zbiór konfiguracji poszerzamy tylko o | a zbiór konfiguracji poszerzamy tylko o | ||
<math> | <math> \{ \mbox{było-}\mathbf{exit}, \mbox{było-}\mathbf{continue} \} </math>. | ||
\{ \mbox{było-}\mathbf{exit}, \mbox{było-}\mathbf{continue} \} | |||
</math> | |||
</div></div> | </div></div> | ||
Linia 592: | Linia 589: | ||
pętlę o etykiecie <math> x </math>. Np. program | pętlę o etykiecie <math> x </math>. Np. program | ||
x: \mathbf{loop}\, | x: \mathbf{loop}\, | ||
a := 1; | |||
y: \mathbf{loop}\, | |||
\quad \quad \mathbf{exit} x; | |||
\quad \quad a := a-10; | |||
a := a+1; | |||
a := a+2; | a := a+2; | ||
kończy działanie z wartością zmiennej <math> a = 3 </math>. | kończy działanie z wartością zmiennej <math> a = 3 </math>. |
Wersja z 08:39, 7 sie 2006
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ą dla wyrażeń boolowskich i arytmetycznych i semantykę dla błędów wykonania. Wreszcie dodamy instrukcję pętli i instrukcje niestrukturalnego zakończenia pętli (instrukcje i ).
Rozszerzenia semantyki języka Tiny
Zadanie 1
Zdefiniuj znaczenie wyrażeń boolowskich i arytmetycznych w języku Tiny, w stylu dużych kroków (semantyka naturalna).
Rozwiązanie
Zadanie 2
Rozważ dodatkowo operację dzielenia:
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 (szkic)
Zadanie 3
Rozszerz język Tiny o następującą instrukcję pętli:
to instrukcja pętli, stanowi instrukcję wewnętrzną. Instrukcja wychodzi z nabliższej pętli i kontynuuje wykonanie programu od pierwszej instrukcji za tą pętlą. Instrukcje powraca na początek instrukcji wewnętrznej najbliższej pętli.
Pozważ zarówno semantykę naturalną jak i semantykę małych kroków.
Rozwiązanie 1 (semantyka naturalna)
Rozwiązanie 2 (małe kroki)
Zadania domowe
Zadanie 1
Zaproponuj semantykę mało-krokową języka z zdania 2. Czy różni się ona istotnie od semantyki naturalnej?
Zadanie 2
Napisz semantyję naturalną dla nieznacznie rozszerzonej wersji instrukcji :
Identyfikator pełni tutaj rolę etykiety przypisanej instrukcji , jest też parametrem dwóch pozostałych instrukcji. kończy teraz najbliższą otaczającą pętlę o etykiecie . Podobnie wznawia najbliższą pętlę o etykiecie . Np. program
x: \mathbf{loop}\, a := 1; y: \mathbf{loop}\, \quad \quad \mathbf{exit} x; \quad \quad a := a-10; a := a+1; a := a+2;
kończy działanie z wartością zmiennej .
Zauważmy, że musieliśmy jakoś określić, do wnętrza której pętli
należą trzy ostatnie instrukcje. Użyliśmy to tego celu
wcięć a 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. .
Zadanie 3
Napisz semantykę naturalną i mało-krokową dla rozszerzenia języka Tiny o wyrażenia z efektami ubocznymi:
Obliczenie wyrażenia polega na wykonaniu a potem na obliczeniu . Wartość wyrażenia jest taka jak wartość wyrażenia a efektem ubocznym jest podstawienie tej wartości na zmienną .