Кіріспе

Компьютерлік ғылымда Simple LR немесе SLR – LR талдаушысының бір түрі, ол кішкентай талдау кестелерімен және салыстырмалы түрде қарапайым талдау генераторы алгоритмімен жұмыс істейді. Басқа LR(1) талдаушылары сияқты, SLR талдаушысы кіріс ағыны бойынша солдан оңға бір рет сканерлеу арқылы, болжау немесе кері қайтарусыз, төменнен жоғарыға қарай дұрыс талдауды табуда өте тиімді. Парсер тілдің формалды грамматикасынан механикалық түрде құрастырылады. SLR және LALR, сондай-ақ Canonical LR талдаушысы сияқты әдістер бірдей әдістерге және ұқсас кестелерге ие; олар тек талдаушы генераторы құралы қолданатын математикалық грамматикалық талдау алгоритмдерімен ғана ерекшеленеді. SLR және LALR генераторлары бірдей өлшемдегі және бірдей талдаушы күйлері бар кестелерді жасайды. SLR генераторлары yacc және Bison сияқты LALR генераторларына қарағанда аз грамматиканы қабылдайды. Көптеген компьютерлік тілдер SLR-дің шектеулеріне оңай сәйкес келмейді. Тілдің табиғи грамматикасын SLR грамматикасына бейімдеу үшін көптеген ұғымдардан бас тарту және грамматиканы өзгерту қажет. Сондықтан LALR генераторлары, біршама күрделі құрал болғанына қарамастан, SLR генераторларына қарағанда әлдеқайда кеңінен қолданылады. SLR әдістері жоғары оқу орындарында компилятор теориясы бойынша оқуда пайдалы кезең болып табылады. SLR және LALR екеуін де Фрэнк ДеРемер Дональд Кнуттың LR талдаушы теориясының алғашқы практикалық қолданысы ретінде әзірледі. Толық LR әдістерімен нақты грамматика үшін жасалған кестелер өте үлкен, сол онжылдықтағы көптеген компьютерлердің жадысынан асып түседі, SLR және LALR әдістерінен 100 есе немесе одан да көп талдаушы күйіне ие.

Көзқарас құрылғылары

SLR мен LALR арасындағы айырмашылықтарды түсіну үшін олардың көптеген ұқсастықтарын және олардың екеуі де ауысу-қайтару шешімдерін қалай қабылдайтынын түсіну маңызды. (Осы мәліметтер үшін LR анализаторы мақаласын қараңыз, қайтарулардың алдын қарау жиындарына дейін.) SLR мен LALR арасындағы жалғыз айырмашылық – олардың генераторлары кейбір аяқталған өндіріс ережесі табылғанда және қысқартылғанда келесі кездесетін кіріс символдарының алдын қарау жиындарын қалай есептейді. SLR генераторлары қарапайым жуықтау әдісімен, тікелей грамматикаға сүйене отырып есептейді, жеке анализатор күйлері мен өтулердің егжей-тегжейін назарға алмайды. Бұл қазіргі анализатор күйінің ерекше жағдайын елемейді. Егер грамматикада S есімді терминалды емес символ бірнеше жерде қолданылса, SLR оларды жеке-жеке қарастырмай, бірдей қарастырады. SLR генераторы S-тің кез келген нұсқасынан кейін дереу келе алатын барлық терминал символдарының жиынтығын – Follow(S) есептейді. Анализ кестесінде S-ке жасалған әрбір қысқару LR(1) алдын қарау жиыны ретінде Follow(S) жиынын пайдаланады. Мұндай Follow жиындары LL жоғарыдан төменге қарай анализатор генераторларында да қолданылады. Follow жиындарын қолданғанда ауысу/қысқару немесе қысқару/қысқару қақтығыстары болмайтын грамматика SLR грамматикасы деп аталады. LALR генераторлары алдын қарау жиындарын есептеу үшін анализатор күйлерінің графигін және олардың өтулерін зерттеуге негізделген дәлірек әдіс қолданады. Бұл әдіс қазіргі анализатор күйінің ерекше жағдайын ескереді. Ол S есімді терминалды емес символдың грамматикадағы әр кездесуін жеке өңдейді. Бұл есептеудің толық мәліметтері үшін LALR анализаторы мақаласын қараңыз. LALR генераторларымен есептелген алдын қарау жиындары SLR генераторларымен есептелген жуықтау жиындарының ішкі жиыны болып табылады (яғни, олардан жақсы). Егер грамматикада SLR Follow жиындарын қолданғанда кестелік қақтығыстар болса, бірақ LALR Follow жиындарын қолданғанда қақтығыстар болмаса, онда ол LALR грамматикасы деп аталады.