Metody realizacji języków programowania/MRJP Ćwiczenia 5: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Zaroda (dyskusja | edycje)
Nie podano opisu zmian
Zaroda (dyskusja | edycje)
 
(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:


== Zadanie - tłumaczenie funkcji ==
'''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;