Az SLR(1) egy alulról felfelé irányuló elemzési algoritmus.
Ez az LR(0) algoritmus kiterjesztése . Bizonyos esetekben működik, amikor egy LR(0) elemző tábla felépítése egy adott nyelvtanhoz nem lehetséges a shift-cast vagy cast-cast ütközések miatt. Így az SLR(1) szerint elemzett nyelvtanok osztálya (kr. "SLR(1)-grammatika") szélesebb, mint az LR(0)-nyelvtanok osztálya.
Maga az elemzési algoritmus (amely az analizátort a bemeneti adatfolyamnak megfelelően hajtja végre) ugyanaz az SLR(1) és LR(0) - és tágabb értelemben az LALR(1) esetében is . Csak azok az algoritmusok különböznek egymástól, amelyek az elemző táblát a nyelvtan alapján állítják össze az analizátor előállítása során.
A nyelvtan minden nem A termináljához a First(A) terminálok készlete jön létre, a következőképpen definiálva:
Ugyanezeket a készleteket használjuk az LL(1) analizátor felépítéséhez.
Továbbá az First(A) halmazok alapján létrejönnek a Follow(A) készletek, a következőképpen definiálva
(lehet általánosítani ezeket a feltételeket a B -> null szabályok megléte esetén)
Ezután az LR(0-hoz hasonlóan) az elemző tábla generálódik, azzal a különbséggel, amikor az öntési műveleteket megadjuk. Az S állapot és a C bemeneti szimbólum leadása csak akkor kerül táblázatba, ha az S-ben van egy karakterlánc, amely megfelel a szabály teljes jobb oldalának, és a szabály bal oldalán lévő nem terminális N teljesíti a "C követésben van" N)".
Ez azt eredményezi, hogy az SLR(1) kevesebb kísérletet tesz arra, hogy "castot" helyezzen az elemzési táblázat cellájába, ami csökkenti a castokkal való ütközés kockázatát, néha teljesen megszabadul tőlük, és olyan nyelvtant készít, amelyet az LR(0) nem értelmez. ) értelmezhető.
Szinte nincs benne (kivéve az oktatási célokat), mivel a nyelvtanok szűk osztályát elemzik. Gyakorlati alkalmazás az LALR(1), amely az SLR(1) általánosítása.
Az unáris és bináris operátorokat és zárójeleket tartalmazó aritmetikai kifejezések elemzése SLR(1) segítségével történik.