Semantyka i weryfikacja programów/Ćwiczenia 11

Z Studia Informatyczne
Wersja z dnia 10:44, 5 wrz 2023 autorstwa Luki (dyskusja | edycje) (Zastępowanie tekstu – „ </math>” na „</math>”)
Przejdź do nawigacjiPrzejdź do wyszukiwania

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.