Кіріспе
Компьютерлік ғылымдағы талдаушының түрі. Компьютерлік ғылымда 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 талдаушы генераторы арқылы грамматикадан автоматты түрде жасауға болады. Автоматты түрде құрылған кодты қолмен жазылған кодпен толықтырып, нәтижедегі талдаушының қуатын арттыруға болады.
In computer science, an LALR parser (look ahead, left to right, rightmost derivation parser) is part of the compiling process where human readable text is converted into a structured representation to be read by computers. An LALR parser is a software tool to process (parse) text into a very specific internal representation that other programs, such as compilers, can work with. This process happens according to a set of production rules specified by a formal grammar for a computer language. An LALR parser is a simplified version of a canonical LR parser. The LALR parser was invented by Frank DeRemer in his 1969 PhD dissertation, Practical Translators for LR(k) languages, in his treatment of the practical difficulties at that time of implementing LR(1) parsers. He showed that the LALR parser has more language recognition power than the LR(0) parser, while requiring the same number of states as the LR(0) parser for a language that can be recognized by both parsers. This makes the LALR parser a memory efficient alternative to the LR(1) parser for languages that are LALR. It was also proven that there exist LR(1) languages that are not LALR. Despite this weakness, the power of the LALR parser is sufficient for many mainstream computer languages, including Java, though the reference grammars for many languages fail to be LALR due to being ambiguous. In 1982, DeRemer and Tom Pennello published an algorithm that generated highly memory efficient LALR parsers. LALR parsers can be automatically generated from a grammar by an LALR parser generator such as Yacc or GNU Bison. The automatically generated code may be augmented by hand written code to augment the power of the resulting parser.
Тарих
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) болатынын анықтау мүмкін емес.