Semantyka i weryfikacja programów/Ćwiczenia 10: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Mengel (dyskusja | edycje)
Dorota (dyskusja | edycje)
Nie podano opisu zmian
Linia 44: Linia 44:


Deklaracja <math>\mathbf{fun}\, F (x); i\, \mathbf{endfun}  
Deklaracja <math>\mathbf{fun}\, F (x); i\, \mathbf{endfun}  
</math> wprowadza funkcję o nazwie ''F'' z jednym parametrem ''x'' przekazywanym  
</math> wprowadza funkcję o nazwie <math>F</math> z jednym parametrem <math>x</math> przekazywanym  
przez zmienną. Wykonanie funkcji polega na wykonaniu instrukcji ''i'', która  
przez zmienną. Wykonanie funkcji polega na wykonaniu instrukcji <math>i</math>, która  
powinna zawierać przypisanie na identyfikator ''F''. Takie przypisanie ustala  
powinna zawierać przypisanie na identyfikator <math>F</math>. Takie przypisanie ustala  
wartość funkcji ale '''nie''' kończy wykonania instrukcji i.  
wartość funkcji ale '''nie''' kończy wykonania instrukcji i.  


== Kontynuacje instrukcji ==
== Kontynuacje instrukcji ==
=== Zadanie 2 ===
=== Zadanie 2 ===
Powróćmy do języka Tiny. Dodajmy do niego następujące instrukcje:
Powróćmy do języka TINY. Dodajmy do niego następujące instrukcje:


<math>
<math>
Linia 133: Linia 133:
     '''end'''
     '''end'''
   '''end'''
   '''end'''
zakończy się ze zmienną x równą 2.  
zakończy się ze zmienną <math>x</math> równą 2.  
Choć środowiska wydają się tu niepotrzebne spróbuj wykorzystać je do  
Choć środowiska wydają się tu niepotrzebne, spróbuj wykorzystać je do  
przechowywania pewnych potrzebnych informacji.
przechowywania pewnych potrzebnych informacji.

Wersja z 15:01, 29 wrz 2006

Funkcje

Zadanie 1

Zdefiniuj semantykę denotacyjną następującego języka:

n::=0|1|

x::=(identyfikatory)

e::=n|x|e1+e2|𝐜𝐚𝐥𝐥F(x)

b::=e1=e2|𝐧𝐨𝐭b|b1𝐨𝐫b2

i::=x:=e|i1;i2|𝐢𝐟b𝐭𝐡𝐞𝐧i1𝐞𝐥𝐬𝐞i2|𝐬𝐤𝐢𝐩|𝐰𝐡𝐢𝐥𝐞b𝐝𝐨i|𝐛𝐞𝐠𝐢𝐧d;i𝐞𝐧𝐝

d::=𝐯𝐚𝐫x:=e|d1;d2|𝐟𝐮𝐧F(x);i𝐞𝐧𝐝𝐟𝐮𝐧

Deklaracja 𝐟𝐮𝐧F(x);i𝐞𝐧𝐝𝐟𝐮𝐧 wprowadza funkcję o nazwie F z jednym parametrem x przekazywanym przez zmienną. Wykonanie funkcji polega na wykonaniu instrukcji i, która powinna zawierać przypisanie na identyfikator F. Takie przypisanie ustala wartość funkcji ale nie kończy wykonania instrukcji i.

Kontynuacje instrukcji

Zadanie 2

Powróćmy do języka TINY. Dodajmy do niego następujące instrukcje:

i::=x:=e|i1;i2|𝐢𝐟b𝐭𝐡𝐞𝐧i1𝐞𝐥𝐬𝐞i2|𝐬𝐤𝐢𝐩|𝐚𝐛𝐨𝐫𝐭|𝐰𝐡𝐢𝐥𝐞b𝐝𝐨i|𝐫𝐞𝐩𝐞𝐚𝐭i𝐮𝐧𝐭𝐢𝐥b

Zdefiniuj semantykę kontynuacyjną powyższych instrukcji. Możesz przy tym korzystać z gotowych już funkcji semantycznych dla pozostałych kategorii (w semantyce bezpośredniej) syntaktycznych.

Zadanie 3

Rozszerz język z poprzedniego zadania o konstrukcje

i::=𝐥𝐨𝐨𝐩i𝐞𝐧𝐝𝐥𝐨𝐨𝐩|𝐛𝐫𝐞𝐚𝐤|𝐜𝐨𝐧𝐭𝐢𝐧𝐮𝐞


Zadanie 4

Uzupełnij definicję języka o bloki, deklaracje zmiennych i procedur oraz wywołanie procedury.

Zadanie 5

Zdefiniuj semantykę denotacyjną następującego języka:

n::=0|1|

x::=(identyfikatory)

e::=n|x|e1+e2|𝐜𝐚𝐥𝐥F(x)

i::=x:=e|i1;i2|𝐬𝐤𝐢𝐩|𝐢𝐟e1=e2𝐭𝐡𝐞𝐧i1𝐞𝐥𝐬𝐞i2|𝐛𝐫𝐞𝐚𝐤|𝐫𝐨𝐥𝐥𝐛𝐚𝐜𝐤|𝐚𝐠𝐚𝐢𝐧

p::=𝐛𝐞𝐠𝐢𝐧i𝐞𝐧𝐝

Program i instukcje postaci 𝐛𝐞𝐠𝐢𝐧i𝐞𝐧𝐝 są blokami. Instrukcja break powoduje natychmiastowe wyjście z bloku i wznowienie wykonania od następnej instrukcji po bloku. Instrukcja again to skok do pierwszej instrukcji w najbardziej zagnieżdżonym bloku, w którym wystąpiła. Instrukcja rollback działa podobnie jak break, ale anuluje wszystkie zmiany dokonane od ostatniego wejścia do bloku, w którym wystąpiła.

Wykonanie programu:

 begin
   x := 2;
   begin
     x := x + 1;
     if x = 5 then rollback else again
   end
 end

zakończy się ze zmienną x równą 2. Choć środowiska wydają się tu niepotrzebne, spróbuj wykorzystać je do przechowywania pewnych potrzebnych informacji.