LALR(1)

LALR(1)

Восходящий алгоритм синтаксического разбора.

Представляет собой расширение алгоритма SLR(1). В ряде случаев работает тогда, когда построение SLR(1) таблицы разбора для данной грамматики невозможно из-за конфликтов сдвиг-свертка или свертка-свертка. Таким образом, класс грамматик, разбираемых по LALR(1) (кр. "LALR(1)-грамматик") шире, чем класс SLR(1)-грамматик.

Буквы "LA" в сокращении означают "lookahead".

Алгоритм собственно разбора (исполнения анализатора по входному потоку) одинаков и у LALR(1), и у SLR(1) - и, шире, у LR(0). Различаются только алгоритмы построения таблицы разбора по грамматике в процессе генерации анализатора.

Описание

Пусть есть грамматика, не разбираемая из-за конфликтов сдвиг-свертка или свертка-свертка по алгоритму SLR(1).

В этом случае грамматика преобразуется следующим образом:

  • ищется нетерминал, на котором возникла вызвавшая конфликт свертка. Обозначим его A.
  • вводятся новые нетерминалы A1, A2, ..., An, по одному на каждое появление A в правых частях правил.
  • везде в правых частях правил A заменяется на соответствующее Ak.
  • набор правил с A в левой части повторяется n раз по разу для каждого Ak.
  • правила с A в левой части удаляются, тем самым полностью удаляя A из грамматики.

Для преобразованной грамматики (она изоморфна исходной) повторяется попытка построения SLR(1) таблицы разбора.

Действие основано на том, что Follow(A) есть объединение всех Follow(Ak). В каждом конкретном состоянии новая грамматика имеет уже не A, а одно из Ak, т.е. множество Follow для данного состояния имеет меньше элементов, чем для A в исходной грамматике.

Это приводит к тому, что для LALR(1) совершается меньше попыток поставить "приведение" в клеточку таблицы разбора, что уменьшает риск возникновения конфликтов с приведениями, иногда вовсе избавляет от них и делает грамматику, не разбираемую по SLR(1), разбираемой после преобразования.

Множество Follow(Ak) называется lookahead set для A и к-той встречи в правилах, отсюда название алгоритма.

LALR(1) и полный LR(1)

Конфликты сдвиг-свертка и свертка-свертка могут остаться и после преобразования грамматики по LALR(1). Это означает, что для данной грамматики необходим полный LR(1) анализатор, который существенно более сложен, но может разбирать любую контексто-свободную однозначную грамматику.

По некоторым сведениями (уточнить!), все LL(1)-грамматики поддаются преобразованию в вид, разбираемый по LALR(1).

Практическое применение

Используется в генераторе синтаксических анализаторов yacc и его производных, таких, как GNU bison.

Большинство реально используемых языков программирования имеют LALR(1)-грамматики, т.е. данного вида анализаторов достаточно для разбора большинства реально используемых языков.

Компилятор GNU С использует yacc для построения синтаксического анализатора. Возможно (наличие строки grammar.y и yacc в теле исполняемого модуля), то же самое делает компания Microsoft для построения своего компилятора языка C.


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "LALR(1)" в других словарях:

  • LALR parser — In computer science, a lookahead LR parser or LALR parser is a specialized form of LR parser that can deal with more context free grammars than Simple LR (SLR) parsers. It is a very popular type of parser because it gives a good trade off between …   Wikipedia

  • LALR Parser Generator — Infobox Software name = LPG caption = developer = Philippe Charles latest release version = latest release date = latest preview version = latest preview date = operating system = platform = genre = parser/scanner generator license = EPL website …   Wikipedia

  • LALR-Parser — Im Compilerbau ist der LALR Parser (Lookahead LR Parser) ein modifizierter LR(1) Parser. Dabei werden die so genannten LR(1) Mengen, die unter der Relation identisch sind, zu einer Menge zusammengefasst. Die Relation ist wie folgt definiert: die… …   Deutsch Wikipedia

  • LALR — lexically assign, logically refine [computer strategy] …   Medical dictionary

  • LALR — • lexically assign, logically refine [computer strategy] …   Dictionary of medical acronyms & abbreviations

  • Analyse LALR — L’analyse LALR (Look Ahead Left Recursive) permet d améliorer la sélectivité d un analyseur syntaxique LR. Voir l ouvrage « Compilers: Principles, Techniques, and Tools » de Alfred V. Aho, Ravi Sethi, et Jeffrey D. Ullman, chez… …   Wikipédia en Français

  • Comparison of parser generators — This is a list of notable lexer generators and parser generators for various language classes. Contents 1 Regular languages 2 Deterministic context free languages 3 Parsing expression grammars, deterministic boolean grammars …   Wikipedia

  • LR parser — In computer science, an LR parser is a parser for context free grammars that reads input from Left to right and produces a Rightmost derivation. The term LR( k ) parser is also used; here the k refers to the number of unconsumed look ahead input… …   Wikipedia

  • GOLD (parser) — Infobox Software name = GOLD Parsing System caption = developer = Devin Cook [http://www.devincook.com/goldparser/contributors Multiple Contributors] latest release date = 2007 07 29 latest release version = 3.4.4 operating system = Windows… …   Wikipedia

  • Analyse LR — En informatique, un analyseur LR (pour Left to right, Rightmost derivation) est un analyseur pour les grammaires non contextuelles qui lit l entrée de gauche à droite et produit une dérivation droite. On parle aussi d analyseur LR(k) où k… …   Wikipédia en Français


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»