SLR(1) är en nedifrån och upp-parsningsalgoritm.
Det är en förlängning av LR(0) -algoritmen . I vissa fall fungerar det när det inte är möjligt att bygga en LR(0)-tolkningstabell för en given grammatik på grund av skift-cast eller cast-cast-konflikter. Således är klassen av grammatiker analyserade enligt SLR(1) (cr. "SLR(1)-grammars") bredare än klassen av LR(0)-grammars.
Själva analysalgoritmen (exekverar analysatorn enligt ingångsströmmen) är densamma för både SLR(1) och LR(0) — och, mer allmänt, för LALR(1) . Endast algoritmerna för att konstruera analystabellen genom grammatik i processen att generera analysatorn skiljer sig åt.
För varje icke-terminal A i grammatiken genereras en uppsättning terminaler First(A), definierade enligt följande:
Samma uppsättningar används för att konstruera LL(1)-analysatorn.
Vidare, baserat på First(A)-uppsättningarna, genereras Follow(A)-uppsättningarna, definierade enligt följande
(det är möjligt att generalisera dessa villkor för fallet med förekomsten av regler B -> null)
Därefter genereras analystabellen, som för LR(0), med en skillnad när cast-åtgärderna matas in. Casten för tillståndet S och ingångssymbolen C tabelleras endast om det finns en sträng i S som matchar hela högra sidan av regeln, och det icke-terminala N från vänster sida av regeln uppfyller villkoret "C är i Follow( N)".
Detta resulterar i färre försök för SLR(1) att sätta en "cast" i analystabellscellen, vilket minskar risken för konflikter med casts, ibland att bli av med dem helt och hållet, och gör en grammatik som inte tolkas av LR(0) ) parserbar.
Det har den nästan inte (förutom för utbildning) på grund av den smala klassen av grammatik som analyseras. En praktisk tillämpning är LALR(1), som är en generalisering av SLR(1).
Aritmetiska uttryck med unära och binära operatorer och parenteser tolkas med hjälp av SLR(1)