Zrcadlovka(1)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 1. prosince 2014; ověření vyžaduje 1 úpravu .

SLR(1)  je algoritmus analýzy zdola nahoru.

Jedná se o rozšíření algoritmu LR(0) . V některých případech to funguje, když sestavení LR(0) parse tabulky pro danou gramatiku není možné kvůli konfliktům shift-cast nebo cast-cast. Třída gramatik analyzovaných podle SLR(1) (cr. "SLR(1)-grammars") je tedy širší než třída LR(0)-gramatik.

Samotný algoritmus analýzy (provádějící analyzátor podle vstupního toku) je stejný pro SLR(1) i LR(0) — a v širším měřítku pro LALR(1) . Liší se pouze algoritmy pro konstrukci tabulky analýzy podle gramatiky v procesu generování analyzátoru.

Popis

Pro každý neterminál A v gramatice je vygenerována sada terminálů First(A), definovaná takto:

Stejné sady jsou použity pro konstrukci analyzátoru LL(1).

Dále, na základě sad First(A), jsou generovány sady Follow(A), definované následovně

(je možné tyto podmínky zobecnit pro případ přítomnosti pravidel B -> null)

Dále se vygeneruje tabulka analýzy, jako u LR(0), s rozdílem, kdy jsou zadány akce přetypování. Přetypování pro stav S a vstupní symbol C je tabelováno pouze v případě, že v S je řetězec, který odpovídá celé pravé straně pravidla, a neterminál N z levé strany pravidla splňuje podmínku „C je v Follow( N)".

To má za následek méně pokusů pro SLR(1) vložit "přetypování" do buňky tabulky analýzy, což snižuje riziko konfliktů s přetypováním, někdy se jich úplně zbaví a vytvoří gramatiku, která není analyzována pomocí LR(0 ) parsovatelné.

Praktická aplikace

Téměř nemá (kromě vzdělávacích) kvůli úzké třídě gramatik, které se analyzují. Praktickou aplikací je LALR(1), což je zobecnění SLR(1).

Aritmetické výrazy s unárními a binárními operátory a závorkami jsou analyzovány pomocí SLR(1)

Viz také

LALR(1)

LR(0)

LR analyzátor

LL(1)

LL analyzátor