Teoria kompilacji i kompilatory (2017/18)

Zadanie 1

Metody rozbioru gramatycznego.

  1. metody prawostronne i lewostronne
  2. generacyjna "top-down"
  3. redukcyjna "bottom-up"

Zadanie 2

Dla gramatyki:

SL=ELa  a(E)EE+V  VVa  a(E)  (E)S \rightarrow L = E \\ L \rightarrow a\ |\ a(E) \\ E \rightarrow E + V\ |\ V \\ V \rightarrow a\ |\ a(E)\ |\ (E)

zbudować tablicę parsera LL(1) i sprawdzić, czy ciąg a(a+a)=a+a(a)a(a+a)=a+a(a) należy do gramatyki.

  1. Usunięcie lewostronnej rekursji

    SL=ELa  a(E)EVEE+VE  ϵVa  a(E)  (E)S \rightarrow L=E \\ L \rightarrow a\ |\ a(E) \\ E \rightarrow VE' \\ E' \rightarrow +VE'\ |\ \epsilon \\ V \rightarrow a\ |\ a(E)\ |\ (E)

  2. Usunięcie lewostronnej faktoryzacji

    SL=ELaLL(E)  ϵEVEE+VE  ϵVL  (E)S \rightarrow L=E \\ L \rightarrow aL' \\ L' \rightarrow (E)\ |\ \epsilon \\ E \rightarrow VE' \\ E' \rightarrow +VE'\ |\ \epsilon \\ V \rightarrow L\ |\ (E)

  3. Wyznaczenie zbiorów FIRST i FOLLOW

    FIRST FOLLOW
    SS a $
    LL a =, +, $, )
    LL' (, ϵ\epsilon =, +, $, )
    EE a, ( $, )
    EE' +, ϵ\epsilon $, )
    VV a, ( +, $, )
  4. Tworzenie tablicy parsera

    1. SL=ES \rightarrow L=E
    2. LaLL \rightarrow aL'
    3. L(E)L' \rightarrow (E)
    4. LϵL' \rightarrow \epsilon
    5. EVEE \rightarrow VE'
    6. E+VEE' \rightarrow +VE'
    7. EϵE' \rightarrow \epsilon
    8. VLV \rightarrow L
    9. V(E)V \rightarrow (E)
    a ( ) + = $
    SS L=EL=E - 1
    LL aLaL' - 2
    LL' (E)(E) - 3 ϵ\epsilon - 4 ϵ\epsilon - 4 ϵ\epsilon - 4 ϵ\epsilon - 4
    EE VEVE' - 5 VEVE' - 5
    EE' ϵ\epsilon - 7 +VE+VE' - 6 ϵ\epsilon - 7
    VV LL - 8 (E)(E) - 9
  5. Sprawdzenie ciągu a(a+a)=a+a(a)a(a+a)=a+a(a)

    stos symbole produkcje
    #S a(a+a)=a+a(a)$ ϵ\epsilon
    #E=L a(a+a)=a+a(a)$ 1
    #E=L'a a(a+a)=a+a(a)$ 1, 2
    #E=L' (a+a)=a+a(a)$ 1, 2
    #E=)E( (a+a)=a+a(a)$ 1, 2, 3
    #E=)E a+a)=a+a(a)$ 1, 2, 3
    #E=)E'V a+a)=a+a(a)$ 1, 2, 3, 5
    #E=)E'L a+a)=a+a(a)$ 1, 2, 3, 5, 8
    #E=)E'L'a a+a)=a+a(a)$ 1, 2, 3, 5, 8, 2
    #E=)E'L' +a)=a+a(a)$ 1, 2, 3, 5, 8, 2
    #E=)E' +a)=a+a(a)$ 1, 2, 3, 5, 8, 2, 4
    #E=)E'V+ +a)=a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6
    #E=)E'V a)=a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6
    #E=)E'L a)=a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8
    #E=)E'L'a a)=a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2
    #E=)E'L' )=a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2
    #E=)E' )=a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4
    #E=) )=a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7
    #E= =a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7
    #E a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7
    #E'V a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5
    #E'L a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8
    #E'L'a a+a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2
    #E'L' +a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2
    #E' +a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4
    #E'V+ +a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6
    #E'V a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6
    #E'L a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8
    #E'L'a a(a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2
    #E'L' (a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2
    #E')E( (a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2, 3
    #E')E a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2, 3
    #E')E'V a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2, 3, 5
    #E')E'L a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2, 3, 5, 8
    #E')E'L'a a)$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2, 3, 5, 8, 2
    #E')E'L' )$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2, 3, 5, 8, 2
    #E')E' )$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2, 3, 5, 8, 2, 4
    #E') )$ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2, 3, 5, 8, 2, 4, 7
    #E' $ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2, 3, 5, 8, 2, 4, 7
    # $ 1, 2, 3, 5, 8, 2, 4, 6, 8, 2, 4, 7, 5, 8, 2, 4, 6, 8, 2, 3, 5, 8, 2, 4, 7, 7

    Zadany ciąg należy do tej gramatyki.

Zadanie 3

Mamy daną gramatykę i zbudowaną tablicę parsera SLR(1). Mamy sprawdzić, czy zadany ciąg należy do tej gramatyki.

ABAAϵBaBBbA \rightarrow BA \\ A \rightarrow \epsilon \\ B \rightarrow aB \\ B \rightarrow b

a b # A B
0 s3 s3 r2 1 2
1 acc
2 s3 s4 r2 5 2
3 s3 s4 6
4 r4 r4 r4
5 r1
6 r3 r3 r3

Ciąg do sprawdzenia: aabb#aabb\#

stos symbole wejście akcja
0 aabb# przesunięcie
0 3 a abb# przesunięcie
0 3 3 aa bb# przesunięcie
0 3 3 4 aab b# redukcja BbB \rightarrow b
0 3 3 6 aaB b# redukcja BaBB \rightarrow aB
0 3 6 aB b# redukcja BaBB \rightarrow aB
0 2 B b# przesunięcie
0 2 4 Bb # redukcja BbB \rightarrow b
0 2 2 BB # redukcja AϵA \rightarrow \epsilon
0 2 2 5 BBA # redukcja ABAA \rightarrow BA
0 2 5 BA # redukcja ABAA \rightarrow BA
0 1 A # akceptacja