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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
m Zastępowanie tekstu – „ </math>” na „</math>”
m Zastępowanie tekstu – „,↵</math>” na „</math>,”
Linia 32: Linia 32:
         \mathbf{if}\, b \,\mathbf{then}\, i_1 \,\mathbf{else}\, i_2 \,\,|\,\,
         \mathbf{if}\, b \,\mathbf{then}\, i_1 \,\mathbf{else}\, i_2 \,\,|\,\,
         \mathbf{skip} \,\,|\,\,
         \mathbf{skip} \,\,|\,\,
         \mathbf{while}\, b \,\mathbf{do}\, i \,\,|\,\,
         \mathbf{while}\, b \,\mathbf{do}\, i \,\,|\,\</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>.
Linia 51: Linia 50:
l \, ::= \,\,  
l \, ::= \,\,  
         x    \,\,|\,\,
         x    \,\,|\,\,
         x [e]  \,\,|\,\,
         x [e]  \,\,|\,\</math>,
</math>


<math>
<math>

Wersja z 21:48, 11 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

Parser nie mógł rozpoznać (błąd składni): {\displaystyle i \, ::= \,\, x := e \,\,|\,\, i_1; i_2 \,\,|\,\, \mathbf{if}\, b \,\mathbf{then}\, i_1 \,\mathbf{else}\, i_2 \,\,|\,\, \mathbf{skip} \,\,|\,\, \mathbf{while}\, b \,\mathbf{do}\, 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)

Parser nie mógł rozpoznać (błąd składni): {\displaystyle 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.