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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Mbiskup (dyskusja | edycje)
Dorota (dyskusja | edycje)
Nie podano opisu zmian
 
Linia 33: Linia 33:
Przeprowadź analizę typów.
Przeprowadź analizę typów.


'''Wskazówka''': Zgodnie z metodą przedstawioną w wykładzie, analiza typów w przypadku przeciążania zwracanej wartości funkcji zachodzi w dwóch fazach:
'''Wskazówka''': Zgodnie z metodą przedstawioną w wykładzie analiza typów w przypadku przeciążania zwracanej wartości funkcji zachodzi w dwóch fazach:
# wstępującej - idąc od liści do korzenia w każdym węźle wylicz listę możliwe typy,
# wstępującej - idąc od liści do korzenia w każdym węźle wylicz listę możliwe typy,
# zstępującej - idąc od korzenia do liści w każdym węźle określ jednoznacznie możliwy typ.
# zstępującej - idąc od korzenia do liści w każdym węźle określ jednoznacznie możliwy typ.
Linia 50: Linia 50:
         h : '''int''' -> K (wynikiem jest referencja do K)
         h : '''int''' -> K (wynikiem jest referencja do K)


Powiedz które z poniższych wyrażeń są L-wartościami:
Powiedz, które z poniższych wyrażeń są L-wartościami:


  f
  f

Aktualna wersja na dzień 14:11, 27 wrz 2006

Autor: Marek Biskup (mbiskup@mimuw.edu.pl)

Zadanie 1 - sprawdzanie typów

Dana jest tablica symboli:

f : int -> double
a : int
g : double, int -> string
print: string -> void

Narysuj drzewo składniowe dla fragmentu kodu źródłowego

print( g( f( 1, a ) ) );

Określ typ każdego węzła.

Zadanie 2 - przeciążanie funkcji

Dana jest tablica symboli:

f : int -> string
f : int -> double
g : double -> string
g : string -> void
h : string, double -> int

Narysuj drzewo składniowe dla fragmentu kodu źródłowego:

 h ( g( f(5), 8)

Przeprowadź analizę typów.

Wskazówka: Zgodnie z metodą przedstawioną w wykładzie analiza typów w przypadku przeciążania zwracanej wartości funkcji zachodzi w dwóch fazach:

  1. wstępującej - idąc od liści do korzenia w każdym węźle wylicz listę możliwe typy,
  2. zstępującej - idąc od korzenia do liści w każdym węźle określ jednoznacznie możliwy typ.

Zadanie 3 - L-wartości

Fragment tablicy symboli kompilatora to

f : int -> void
g : int -> int
t : referencja (wskaźnik) do tablicy intów
i : int
d : double
r : referencja do obiektu klasy K, zawierającej
        a : int
        h : int -> K (wynikiem jest referencja do K)

Powiedz, które z poniższych wyrażeń są L-wartościami:

f
g
t
i
d
f(1)
g(1)
t[1]
t[g(1)]
i + 5
t[t[g(1)] + 5]
r
r.a
r.h(1)
r.h(1).a