Ćwiczenia 2: gramatyki bezkontekstowe

  1. (Aho, Sethi, Ullmann) Rozważmy gramatykę
    \[ S \to aSbS | bSaS | \epsilon \]

    a) Budując dwa różne drzewa lewostronnego wyprowadzenia dla słowa \(abab\), wykaż, że gramatyka ta jest niejednoznaczna

    b) Zbuduj odpowiadające wyprowadzenia prawostronne dla \(abab\).

    c) Jaki język jest generowany przez tę gramatykę?

  2. Napisz gramatykę dla języka wyrażeń regularnych? Czy ta gramatyka jest jednoznaczna? Jak można uczynić ją jednoznaczną?
  3. Podać gramatykę wieloznaczną dla języka wyrażeń arytmetycznych.
    Wyprowadzić jakieś wyrażenie na 2 różne sposoby.
    Wykazać, że obliczenie wartości tego wyrażenia zależy od wybranego
    drzewa wywodu.

  4. Jak wyżej, dla przykładu z wykładu
    if E1 then if E2 then S1 else S2 i gramatyki z wykładu

  5. Przećwiczyć konsekwencje lewostronnej rekursji dla parsera
    zstępującego zbudowanego automatycznie np. jako automat z gramatyki.
    Zobaczyć, że stos się przepełni bez postępu na wejściu.

  6. Udowodnić, że algorytm usuwania bezpośredniej lewostronnej rekursji
    tworzy gramatykę G' równoważną gramatyce G
    L(G) = L(G')

  7. To samo dla lewostronnej faktoryzacji.