Bezkontextové gramatiky, zásobníkové automaty, LL(1) parsovanie

Ciele

  1. Kontrola úloh z predošlého cvičenia.
  2. Zopakovať si vlastnosti zásobníkových automatov a naučiť sa ich skonštruovať.
  3. Zopakovať si vlastnosti bezkontextových gramatík a prehĺbiť poznatky o LL(1) parsovaní.

Úvod

Cieľom cvičenia je opakovanie, prehĺbenie a precvičenie učiva zameraného na bezkontextové gramatiky, zásobníkové automaty a LL(1) parsovanie.

Postup

Krok 1

Úloha 1.1

Prekontrolujte a prediskutujte riešenia úloh z cvičenia 7.

Krok 2

Úloha 2.1

Navrhnite zásobníkový automat pre jazyk $L(M) = \left\{ a^{n}b^{2n}~|~n \geq 1\right\}$, $n \in \mathbb{N}$.

Krok 3

V tomto kroku vyriešime dve úlohy zamerané na vlastnosti bezkontextových gramatík.

Úloha 3.1

Daná je nasledujúca gramatika:

$$\begin{array}{ll} (1) & S \rightarrow A\# \\ (2) & A \rightarrow xAx \\ (3) & A \rightarrow C \\ (4) & B \rightarrow yBy \\ (5) & B \rightarrow C \\ (6) & C \rightarrow zBz \\ (7) & C \rightarrow wAw \\ (8) & C \rightarrow \varepsilon \\ \end{array}$$

a) Určte množiny $N$, $T$.

b) Skonštruujte deriváciu reťazca $xzzx\#$ začínajúc v $S$. Vyznačte, ktoré odvodzovacie pravidlá ste použili a nakreslite odvodzovací strom podľa Vašej derivácie.

c) Nájdite množiny $\mathit{FIRST}$ a $\mathit{FOLLOW}$ pre každý neterminálny symbol gramatiky.

d) Pre každé pravidlo gramatiky skonštruujte množinu $\mathit{PREDICT}$.

e) Zostavte rozkladovú tabuľku pre danú gramatiku. Zistite, či daná gramatika je LL(1) gramatikou. Svoju odpoveď odôvodnite.

f) Ukážte kroky, ktoré by váš analyzátor realizoval na analýzu vstupu $xzyyzx\#$.

Úloha 3.2

Daná je nasledujúca gramatika:

$$\begin{array}{ll} (1) & S \rightarrow AB\# \\ (2) & A \rightarrow xA \\ (3) & A \rightarrow B \\ (4) & B \rightarrow yzB \\ (5) & B \rightarrow z \\ \end{array}$$

a) Určte množiny $N$, $T$.

b) Skonštruujte strom odvodenia pre vstupný reťazec $xyzzz\#$

c) Nájdite množiny $\mathit{FIRST}$ a $\mathit{FOLLOW}$ pre každý neterminálny symbol gramatiky.

d) Pre každé pravidlo gramatiky skonštruujte množinu $\mathit{PREDICT}$.

e) Zostavte rozkladovú tabuľku pre danú gramatiku. Zistite, či daná gramatika je LL(1) gramatikou. Svoju odpoveď odôvodnite.

f) Ak do danej gramatiky pridáme pravidlo $A \rightarrow \varepsilon$, zmení sa jej klasifikácia? Svoju odpoveď odôvodnite.