Metody realizacji języków programowania 2007, ćwiczenia

Zajęcia

termin: wtorki, 8:30
miejsce: 3140

Konsultacje

termin: wtorki, 12:15-13:00
miejsce: 5460
na konsultacje proszę się umawiać

Konsultacje przed egzaminem (NEW!)

termin: środa, 13 czerwca, 12:00-13:00
miejce: 5460
Uwaga: w powodu wyjazdu nie będę dostępny po 15.06.2007!

Zadania z zeszłego roku z egzaminu - warto rozwiązać! (NEW!)

Zad 1

Poniższy program realizuje sortowanie metodą Shella.
  1. zapisz zaznaczony fragment programu (od "zacznij tu" do "skończ tu") w kodzie czwórkowym
  2. zoptymalizuj program: omów krótko zastosowane techniki optymalizacji, wskaż miejsca, gdzie stosowane były te techniki i napisz czytelnie ostateczną, zoptymalizowana wersję.
Uwagi:
  1. Nie należy rozwijać pętli zewnętrznej (po k) (tzn nie trzeba 16 razy pisać wnętrza pętli aby wyeliminować kilka instrukcji skoku).
  2. Każdy element tablic zajmuje 4 bajty. Nie zapomnij pomnożyć indeksu przez 4 przy odwoływaniu się do tablic a oraz incs w kodzie czwórkowym.
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
}

Zad 2

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

Zad 3

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:
  1. S ::= w1
  2. A ::= w2
  3. A ::= w3
  4. B ::= w4
  5. B ::= w5
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):
  1. Zasymuluj działanie automatu na słowach yxy$ oraz xxxyyy$. Czy te słowa należą do L(G)?
  2. Jakie produkcje występują w G?
  3. Czy L(G) jest regularny?
  4. Czy gramatyka G należy do
    1. LL(1)
    2. LR(0)
    3. SLR,
    4. LR(1)
    5. LALR
    6. LR(k), dla k>1?

Zad 4

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.

2. kolokwium

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;

Zasoby

Gramatyki LL(1)

Ściąga opisująca gramatyki LL(1).

Zadania z 1 kolokwium z zeszlego roku

Dana jest gramatyka G, której symbolem początkowym jest A: Symbole terminalne to małe litery, symbole nieterminalne to wielkie litery.
  1. Czy gramatykę G można sprowadzić do postaci LL(1) ? Jeśli tak, to zrób to i na podstawie przekształconej gramatyki napisz procedury parsera metodą zejść rekurencyjnych.
  2. Czy można zbudować parser LR(0) dla gramatyki G ? Czy można zbudować parser SLR dla gramatyki G ? Czy można zbudować parser LR(1) dla gramatyki G ?
Autorzy: A. Salwicki & A. Zaroda