termin: środa, 13 czerwca, 12:00-13:00
miejce: 5460
Uwaga: w powodu wyjazdu nie będę dostępny po 15.06.2007!
Poniższy program realizuje sortowanie metodą Shella.
Uwagi:
shellsort(itemType a[], int l, int r)
{
int i, j, k, h; itemType v;
int incs[16] = { 1391376, 463792, 198768, 86961, 33936,
13776, 4592, 1968, 861, 336,
112, 48, 21, 7, 3, 1 };
// Zacznij tu
for ( k = 0; k < 16; k++)
for (h = incs[k], i = l+h; i <= r; i++)
{
v = a[i]; j = i;
while (j > h && a[j-h] > v)
{ a[j] = a[j-h]; j -= h; }
a[j] = v;
}
// Skończ tu
}
W składni języka mamy następujące produkcje (terminale są podkreślone):
Gdzie:
Semantyka instrukcji jest standardowa:
Uzupełnij gramatykę o reguły semantyczne opisujące generator kodu
Pewna gramatyka G posiada trzy symbole nieterminalne S (startowy), A i B oraz trzy symbole terminalne x,y i $. W G są następujące produkcje:
gdzie w1...w5 są słowami o długościach 2, 3, 1, 3 oraz 0 odpowiednio.
Dana jest tablica sterująca analizatora składniowego LR dla gramatyki G:
|
|
Akcje |
Goto |
||||
|
|
x |
y |
$ |
A |
B |
S |
|
|
S2 |
S9 |
R5 |
8 |
10 |
|
|
|
S3 |
R5 |
|
|
4 |
|
|
|
S3 |
R5 |
|
|
6 |
|
|
|
|
S5 |
|
|
|
|
|
|
|
|
R4 |
|
|
|
|
|
|
S7 |
|
|
|
|
|
|
|
R4 |
|
|
|
|
|
|
|
|
acc |
|
|
|
|
|
S11 |
|
|
|
|
|
|
|
|
|
R3 |
|
|
|
|
|
S12 |
|
|
|
|
|
|
|
|
|
R2 |
|
|
|
Podzadania (każdą odpowiedź uzasadnij):
Dana jest gramatyka:
Przyjmujemy, że słowo wyprowadzalne z nieterminala Deklaracje jest poprawne, jeśli w każdej wyprowadzonej z niego deklaracji stałej, w wyrażeniu po prawej stronie równości występują wyłącznie identyfikatory zadeklarowanych wcześniej stałych. Dodatkowo wymagamy, by każda zadeklarowana stała miała co najwyżej jedną deklarację.
Dopisz do podanej gramatyki reguły atrybutowania liczące wartość atrybutu Deklaracje.ok mówiącego, czy deklaracje są poprawne.
Temat - wiazanie identyfikatorow i wywolywanie funkcji.
Literatura: Wazniak, MRJP, wykł. 5.
Zadanie przygotowawcze:
program p
var x: integer;
var z: integer
procedure q (var x: integer; y : integer)
procedure r (y : integer)
begin
z := x + y;
x := 1;
y := 4;
end
begin
x := 5;
r(x);
end;
begin
x := 2;
z := 3;
q(x, z);
print x + z;
end.
Zakładamy statyczne wiązanie zmiennych;
Ściąga opisująca gramatyki LL(1).
Dana jest gramatyka G, której symbolem początkowym jest A:
Symbole terminalne to małe litery, symbole nieterminalne to wielkie litery.
Autorzy: A. Salwicki & A. Zaroda