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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Dorota (dyskusja | edycje)
Nie podano opisu zmian
m Zastępowanie tekstu – „ </math>” na „</math>”
Linia 35: Linia 35:
</math>  
</math>  


Wyrażenie <math> b\, ?\, e_1\, :\, e_2 </math> to wyrażenie warunkowe. Wylicza się go wyliczając najpierw <math>b</math>. Jeśli wyliczy się ono do prawdy, to wartością całego wyrażenia jest wartość wyrażenia <math>e_1</math>, a w przeciwnym razie wartość wyrażenia <math>e_2</math>.
Wyrażenie <math> b\, ?\, e_1\, :\, e_2</math> to wyrażenie warunkowe. Wylicza się go wyliczając najpierw <math>b</math>. Jeśli wyliczy się ono do prawdy, to wartością całego wyrażenia jest wartość wyrażenia <math>e_1</math>, a w przeciwnym razie wartość wyrażenia <math>e_2</math>.


=== Zadanie 2 ===
=== Zadanie 2 ===

Wersja z 10:44, 5 wrz 2023

Semantyka w pełni kontynuacyjna

Zadanie 1

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

n::=0|1|

x::=(identyfikatory)

e::=n|x|e1+e2|b?e2:e3

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

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

Wyrażenie b?e1:e2 to wyrażenie warunkowe. Wylicza się go wyliczając najpierw b. Jeśli wyliczy się ono do prawdy, to wartością całego wyrażenia jest wartość wyrażenia e1, a w przeciwnym razie wartość wyrażenia e2.

Zadanie 2

Tym razem większy przykład. Spróbujemy zdefiniować semantykę języka wzorowanego "nieco" na języku programowania C. Oto składnia:

n::=1,0|1|

x::=(identyfikatory)

l::=x|x[e]|

e::=n|l|e1+e2|b?e2:e3|l++|++l|l=e|l+=e|𝐜𝐚𝐥𝐥F(e)

i::=e|i1;i2|𝐢𝐟(e)i|𝐬𝐤𝐢𝐩|𝐰𝐡𝐢𝐥𝐞(e)i|𝐟𝐨𝐫(i1;e;i2)i3|𝐛𝐫𝐞𝐚𝐤|𝐜𝐨𝐧𝐭𝐢𝐧𝐮𝐞|𝐫𝐞𝐭𝐮𝐫𝐧e|{d;i}

d::=𝐯𝐚𝐫x|𝐚𝐫𝐫𝐚𝐲x[e]|d1;d2

Zadanie 3

Zmień semantykę powyższego języka tak, aby przekazywanie parametrów odbywało się przez nazwę.

Zadanie 4

Zmień semantykę powyższego języka tak, aby przekazywanie parametrów odbywało się metodą copy-in copy-out.