Кіріспе

Компьютерлік ғылымдағы талдаушының түрі. Компьютерлік ғылымда LALR талдаушысы (алға қарау, солдан оңға қарай, оң жақтан туынды талдаушы) – адам оқи алатын мәтінді компьютерлер оқи алатын құрылымдалған түрге түрлендіретін компиляция процесінің бір бөлігі. LALR талдаушысы – мәтінді өңдеуге (талдауға) арналған бағдарламалық құрал, ол басқа бағдарламалардың, мысалы, компиляторлардың жұмыс істей алатын өте нақты ішкі түрге айналдырады. Бұл процесс компьютерлік тілдің формальды грамматикасымен белгіленген өндіріс ережелері жиынтығына сәйкес жүзеге асырылады. LALR талдаушысы – канондық LR талдаушысының жеңілдетілген нұсқасы. LALR талдаушысын Фрэнк ДеРемер 1969 жылы «LR(k) тілдері үшін практикалық аудармашылар» атты PhD диссертациясында, LR(1) талдаушыларын іске асырудағы практикалық қиындықтарды қарастырғанда ойлап тапты. Ол LALR талдаушысы LR(0) талдаушысына қарағанда тілді тану қабілеті жағынан күштірек екенін, бірақ екі талдаушы да тани алатын тіл үшін LR(0) талдаушысымен бірдей күйлер санын қажет ететінін көрсетті. Бұл LALR талдаушысын LALR болатын тілдер үшін LR(1) талдаушысына қарағанда жадты тиімді пайдаланатын балама етеді. Сондай-ақ, LR(1) тілдерінің LALR емес екені дәлелденді. Осы кемшілігіне қарамастан, LALR талдаушысының қуаты Java сияқты көптеген негізгі компьютерлік тілдер үшін жеткілікті, бірақ көптеген тілдердің анықтамалық грамматикалары екіұшты болғандықтан LALR бола алмайды. 1982 жылы ДеРемер мен Том Пеннелло өте тиімді LALR талдаушыларын құратын алгоритмді жариялады. LALR талдаушыларын Yacc немесе GNU Bison сияқты LALR талдаушы генераторы арқылы грамматикадан автоматты түрде жасауға болады. Автоматты түрде құрылған кодты қолмен жазылған кодпен толықтырып, нәтижедегі талдаушының қуатын арттыруға болады.

Тарих

1965 жылы Дональд Кнут LR (солдан оңға, ең оң жақтан туынды) талдаушысын ойлап тапты. LR талдаушысы кез келген детерминистік контекстсіз тілді сызықтық шектелген уақытта тани алады. Ең оң жақтан туынды жасау үшін өте көп жад қажет, ал сол кездегі компьютерлердің жады шектеулі болғандықтан LR талдаушысын іске асыру практикалық емес еді. Бұл кемшілікті жою үшін 1969 жылы Франк ДеРемер LR талдаушының екі оңайлатылған нұсқасын ұсынды: Look Ahead LR (LALR) және Simple LR (SLR) талдаушылары. Олардың жадқа қажеттігі азырақ болды, бірақ тілді тану мүмкіндіктері төмендеді, соның ішінде LALR талдаушысы ең қуатты балама болып табылды. 1977 жылы LR талдаушысы үшін жадты оңтайландырулар жасалды, бірақ бәрібір LR талдаушысы оңайлатылған баламаларға қарағанда жадты тиімдірек пайдаланбады. 1979 жылы Фрэнк ДеРемер мен Том Пеннелло LALR талдаушысының жад тиімділігін одан да жақсартатын бірнеше оңтайландырулар жасады. Олардың жұмысы 1982 жылы жарияланды, бірақ олар кеңінен қолданылмады. Басқа LR талдаушылары сияқты, LALR талдаушысы да кіріс ағыны бойынша бір рет солдан оңға қарап, дұрыс төменнен жоғарыға талдауды тиімді түрде таба алады, себебі кері қайту қажеттілігі туындамайды. Анықтамасы бойынша алдын ала қарау талдаушысы болғандықтан, ол әрқашан алдын ала қарауды пайдаланады, ал LALR(1) ең көп қолданылатын нұсқа болып табылады.

LL талдаушылар

LALR(j) талдағыштары LL(k) талдағыштарымен салыстыруға келмейді: кез келген j және k нөмірі 0-ден үлкен болса, LL(k) грамматикасы емес LALR(j) грамматикасы болады, және керісінше де дұрыс. Шындығында, берілген LL(1) грамматикасының кез келген k үшін LALR(k) болатынын анықтау мүмкін емес.