Zadanie 2 |
Dana jest gramatyka operatorowa prowadząca do następujących tabel pierwszeństw operatorów:
ASK |
|
BD |
|
|
|
Wybrać drzewo będące wynikiem parsingu wyrażenia:
|
ASK |
BD |
|
pierwsze |
drugie |
|
pierwsze |
drugie |
|
pierwsze |
pierwsze |
|
drugie |
pierwsze |
Komentarz:
Wyższe pierwszeństwo operatora oznacza, że jego argumenty są silniej połączone; dlatego muszą być bliżej siebie w drzewie.
Punktacja: za każde prawidłowe zaznaczenie po 5 punktów. Sporo osób z BD zaznaczyło dokładnie odwrotnie niż należało (za 0 punktów) -- gdyby rzucali monetą, to wyniki byłyby lepsze. Nie mam pojęcia skąd się to wzięło i dlaczego tylko w BD.
Zadanie 3 |
Wpisać w wolne miejsce w programie zstępującego parsera rekursywnego procedurę odpowiadającą jedynemu nieterminalowi <wyrażenie> gramatyki
ASK |
|
BD |
<wyrażenie> ::= a | b <wyrażenie> ; |
|
<wyrażenie> ::= a | ( <wyrażenie> ) |
|
ASK |
|
BD |
|
|
|
Komentarz:
To miał być sam sprawdzacz składni, co wynika jasno z podanej postaci programu głównego oraz nagłówka procedury wyrazenie (procedura bezparametrowa). Należało pamiętać o przechodzeniu do następnego leksemu w odpowiednich miejscach.
Zadanie 4 |
ASK |
|
BD |
Na każdą zmienną całkowitą rezerwujemy po 4 bajty; zmiennej tablicowej
t : array [11 . . 30, 6 . . 35] of
record
a : integer;
b : integer
end
przypisujemy obszar pamięci zaczynający się w bajcie nr 5 000. Wtedy zmienna
pierwszy
ostatni
t[11, 6] 5000 5007
t[16, 16] 6280 6287
t[11, 6].a 5000 5003
t[16, 16].b 6284 6287
|
|
Na każdą zmienną rzeczywistą rezerwujemy po 8 bajtów; zmiennej tablicowej
a : array [1 . . 20, 1 . . 30] of
record
x : real;
y : real
end
przypisujemy obszar pamięci zaczynający się w bajcie nr 10 000. Wtedy zmienna
pierwszy
ostatni
a[1, 1] 10000 10015
a[7, 21] 13200 13215
a[1, 1].x 10000 10007
a[7, 21].y 13208 13215
|
Komentarz:
Jeśli tablica tab ma deklarację tab : array [n . . n', p . . p'] of T
i zaczyna się w bajcie pocz, to element tab[i, j] zaczyna się w bajcie pocz + ((i - n) * (p' - p + 1) + j - p) * sT
gdzie sT jest ilością bajtów przeznaczoną na element typu T. W tym przypadku T jest typem rekordowym i
dla ASK: składa się z dwóch liczb całkowitych po 4 bajty, razem 8 bajtów,
dla BD: składa się z dwóch liczb rzeczywistych po 8 bajtów, razem 16 bajtów.
ASK |
|
BD |
|
|
|
Zadanie 5 |
Przetłumaczyć na język maszsyny stosowej następującą instrukcję złożoną:
ASK |
|
BD |
|
|
|
|
|
|
|
|
|
4