Jump to content

Генератор парсера LALR

Генератор упреждающего анализатора LR (LALR) — это программный инструмент, который считывает контекстно-свободную грамматику (CFG) и создает анализатор LALR , способный анализировать файлы, написанные на контекстно-свободном языке, определенном CFG. LALR-парсеры желательны, потому что они очень быстрые и небольшие по сравнению с другими типами парсеров.

Существуют и другие типы генераторов парсеров , такие как простой парсер LR , парсер LR , парсер GLR , синтаксический анализатор LL и генераторы парсеров GLL . Что отличает один от другого, так это тип CFG, который они способны принимать, и тип алгоритма анализа, который используется в сгенерированном анализаторе. Генератор анализатора LALR принимает грамматику LALR в качестве входных данных и генерирует анализатор, который использует алгоритм анализа LALR (который управляется таблицами анализатора LALR).

На практике LALR предлагает хорошее решение, поскольку грамматики LALR(1) более мощны, чем SLR(1), и могут анализировать наиболее практичные грамматики LL(1). Грамматики LR(1) более мощны, чем LALR(1), но («канонические») парсеры LR(1) могут быть чрезвычайно большими по размеру и считаются непрактичными. Минимальные парсеры LR(1) имеют небольшой размер и сравнимы с парсерами LALR(1).

Фрэнк ДеРемер изобрел парсеры LALR в своей докторской диссертации под названием «Практические переводчики LR(k)» в 1969 году в Массачусетском технологическом институте. Это был важный прорыв, поскольку трансляторы LR(k), как их определил Дональд Кнут в своей статье 1965 года «О переводе языков слева направо», были слишком большими для реализации в компьютерных системах 1960-х и 70-х годов.

Первым генератором синтаксического анализатора LALR и, вероятно, самым популярным на протяжении многих лет был « yacc » (Еще один компилятор компилятора), созданный Стивеном Джонсоном в 1975 году в AT&T Labs. [1] Другой, «TWS», был создан Фрэнком ДеРемером и Томом Пеннелло. Сегодня доступно множество генераторов парсеров LALR, многие из которых вдохновлены оригинальным Yacc и в значительной степени совместимы с ним, например GNU bison , игра слов на основе оригинального Yacc/ Yak . см . в разделе «Сравнение детерминированных генераторов контекстно-свободных языковых анализаторов» Более подробный список .

Парсер LALR и его альтернативы, парсер SLR и парсер Canonical LR , имеют схожие методы и таблицы синтаксического анализа; их основное отличие заключается в алгоритме математического грамматического анализа, используемом инструментом генерации парсера. Генераторы LALR принимают больше грамматик, чем генераторы SLR, но меньше грамматик, чем полный LR(1). Полный LR включает в себя гораздо большие таблицы синтаксического анализа, и его следует избегать, если это явно не требуется для какого-то конкретного компьютерного языка. Реальные компьютерные языки часто можно выразить как грамматики LALR(1). В тех случаях, когда это невозможно, обычно достаточно грамматики LALR(2). Если генератор синтаксического анализатора допускает только грамматики LALR(1), синтаксический анализатор обычно вызывает некоторый рукописный код всякий раз, когда сталкивается с конструкциями, требующими расширенного просмотра вперед.

Подобно синтаксическому анализатору SLR и генератору синтаксического анализатора LR Canonical, генератор синтаксического анализатора LALR сначала создает конечный автомат LR(0), а затем вычисляет наборы опережающего просмотра для всех правил в грамматике, проверяя на неоднозначность. Canonical LR создает полные наборы просмотра вперед. LALR использует наборы слияния, то есть объединяет наборы просмотра вперед, в которых ядро ​​LR(0) одинаково. SLR использует наборы FOLLOW в качестве наборов просмотра вперед, которые связывают правую часть ядра LR (0) с терминалом просмотра вперед. Это большее упрощение, чем в случае с LALR, поскольку многие конфликты могут возникнуть из-за того, что ядра LR(0) используют одну и ту же правую часть и терминал просмотра вперед, конфликты, которых нет в LALR. Вот почему SLR обладает меньшей способностью распознавания языка, чем LALR, а Canonical LR сильнее обоих, поскольку не включает в себя никаких упрощений.

См. также

[ редактировать ]
  1. ^ Стивен С. Джонсон (1975). «Yacc: Еще один компилятор-компилятор» . Лаборатории AT&T Bell. Архивировано из оригинала 11 июля 2011 г. Проверено 2 июля 2012 г.
  • Альфред В. Ахо, Рави Сетхи и Джеффри Д. Ульман. Компиляторы: принципы, методы и инструменты Addison-Wesley, 1986. (AKA The Dragon Book описывает традиционные методы построения анализаторов LALR(1).)
  • Ричард Борнат «Понимание и написание компиляторов» , Macmillan, 1979. (Описывает принципы автоматического синтаксического анализа слева направо и способы построения таблиц синтаксического анализа, что такое следующий набор и т. д. на английском языке, а не по математике – доступно бесплатно на сайте страница автора в [1] .)

Дальнейшее чтение

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2d4eb296559497326b163b0bd28a1781__1722333180
URL1:https://arc.ask3.ru/arc/aa/2d/81/2d4eb296559497326b163b0bd28a1781.html
Заголовок, (Title) документа по адресу, URL1:
LALR parser generator - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)