Metody realizacji języków programowania/MRJP Ćwiczenia 5: Różnice pomiędzy wersjami
Nie podano opisu zmian |
|||
(Nie pokazano 9 wersji utworzonych przez 2 użytkowników) | |||
Linia 1: | Linia 1: | ||
== Zadanie - tłumaczenie funkcji == | == Zadanie - tłumaczenie funkcji == | ||
Przy założeniu, że mamy do czynienia z językiem bez struktury blokowej (w rekordzie aktywacji nie ma SL) przetłumacz na kod NMW treść funkcji g z poniższego przykładu: | Przy założeniu, że mamy do czynienia z językiem bez struktury blokowej (w rekordzie aktywacji nie ma '''SL'''), przetłumacz na kod '''NMW''' treść funkcji ''g'' z poniższego przykładu: | ||
'''function''' f(w:integer; '''var''' x:integer):integer; | '''function''' f(w:integer; '''var''' x:integer):integer; | ||
Linia 15: | Linia 15: | ||
z:=f(a,a) | z:=f(a,a) | ||
'''end'''; | '''end'''; | ||
W rozwiązaniu skorzystaj z protokołu wywołania i powrotu z funkcji przedstawionego podczas wykładu. | |||
== Zadanie - struktura blokowa == | == Zadanie - struktura blokowa == | ||
Zakładając, że poniższy fragment programu jest napisany w języku ze strukturą blokową, przetłumacz treść procedury r: | Zakładając, że poniższy fragment programu jest napisany w języku ze strukturą blokową, przetłumacz | ||
treść procedury ''r'': | |||
'''procedure''' p(a:integer); | '''procedure''' p(a:integer); | ||
Linia 42: | Linia 45: | ||
'''end'''; | '''end'''; | ||
== Zadanie == | Skorzystaj z protokołu wywołania i powrotu przedstawionego podczas wykładu. | ||
== Zadanie - realizacja mechanizmu "super" == | |||
Wiele obiektowych języków programowania posiada mechanizm umożliwiający wywołanie metody, | |||
którą aktualna metoda przedefiniowuje. Np. : | |||
'''class''' A; | |||
'''procedure''' pisz; | |||
'''begin''' | |||
write('A') | |||
'''end'''; | |||
'''end'''; | |||
'''class''' B '''extends''' A; | |||
'''procedure''' pisz; | |||
'''begin''' | |||
write('B oraz '); | |||
super.pisz | |||
'''end'''; | |||
'''end'''; | |||
Umieszczenie, jako odbiorcy komunikatu, słowa "'''super'''" oznacza tu, że chcemy wywołać metodę z nadklasy. | |||
Zaproponuj sposób realizacji tego mechanizmu i podaj tłumaczenie "'''super.pisz'''" z powyższego przykładu. | |||
== Zadanie - tłumaczenie metod == | |||
Przetłumacz treść metody ''r'' z klasy ''C'' w poniższym fragmencie programu: | |||
== | '''class''' A; | ||
'''var''' w:A; | |||
x:integer; | |||
'''procedure''' p; | |||
'''begin''' | |||
... | |||
'''end'''; | |||
'''end'''; | |||
'''class''' B '''extends''' A; | |||
'''var''' y:integer; | |||
'''procedure''' p; | |||
'''begin''' | |||
... | |||
'''end'''; | |||
'''procedure''' q; | |||
'''begin''' | |||
... | |||
'''end'''; | |||
'''end'''; | |||
'''class''' C '''extends''' B; | |||
'''var''' z:integer; | |||
'''procedure''' r; | |||
'''begin''' | |||
z:=y; | |||
y:=x; | |||
self.q; | |||
w.p | |||
'''end'''; | |||
'''end'''; |
Aktualna wersja na dzień 15:43, 1 paź 2006
Zadanie - tłumaczenie funkcji
Przy założeniu, że mamy do czynienia z językiem bez struktury blokowej (w rekordzie aktywacji nie ma SL), przetłumacz na kod NMW treść funkcji g z poniższego przykładu:
function f(w:integer; var x:integer):integer; begin ... end; function g(y:integer; var z:integer):integer; var a:integer; begin g:=y; a:=z; z:=f(a,a) end;
W rozwiązaniu skorzystaj z protokołu wywołania i powrotu z funkcji przedstawionego podczas wykładu.
Zadanie - struktura blokowa
Zakładając, że poniższy fragment programu jest napisany w języku ze strukturą blokową, przetłumacz treść procedury r:
procedure p(a:integer); procedure q(var b:integer); var c:integer; procedure s(d:integer); begin ... end; procedure r; var e:integer; begin e:=a+b; b:=c; s(b); q(e) end; begin ... end; begin ... end;
Skorzystaj z protokołu wywołania i powrotu przedstawionego podczas wykładu.
Zadanie - realizacja mechanizmu "super"
Wiele obiektowych języków programowania posiada mechanizm umożliwiający wywołanie metody, którą aktualna metoda przedefiniowuje. Np. :
class A; procedure pisz; begin write('A') end; end; class B extends A; procedure pisz; begin write('B oraz '); super.pisz end; end;
Umieszczenie, jako odbiorcy komunikatu, słowa "super" oznacza tu, że chcemy wywołać metodę z nadklasy.
Zaproponuj sposób realizacji tego mechanizmu i podaj tłumaczenie "super.pisz" z powyższego przykładu.
Zadanie - tłumaczenie metod
Przetłumacz treść metody r z klasy C w poniższym fragmencie programu:
class A; var w:A; x:integer; procedure p; begin ... end; end; class B extends A; var y:integer; procedure p; begin ... end; procedure q; begin ... end; end; class C extends B; var z:integer; procedure r; begin z:=y; y:=x; self.q; w.p end; end;