Гибридный метод построения LR-автомата. LALR(1)-грамматика

LALR-автомат

LALR-автомат

Детерменированный конечный автомат, построенный по LR(1)-автомату следующим образом:

  1. Формируемый автомат считать исходным LR(1)-автоматом
  2. Пока в формируемом автомате два множества (состояния) LR(1)-пунктов имеют одинаковое множество ядер, то объединить эти множества в одно, назвать полученный автомат формируемым
Link to original

Пример LALR-автомата

Пример: LR(1)-автомат, построенный по грамматике в лекции является LALR-автоматом

Сокращенный способ построения LALR-автомата

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

Пример построения LALR-автомата сокращенным способом

Часть LR(1)-автомата для . Видно, что данная грамматика является LR(1)-грамматикой

Часть LALR-автомата для грамматики . Видно, что грамматика не LALR(1)-грамматика, поскольку появился конфликт (можно увидеть наглядно, если построить LALR(1)-анализатор)

LALR(1)-анализатор

LALR(1)-анализатор

LR-анализатор, построенный по алгоритму построения LALR(1)-анализатора

Link to original

Алгоритм. Построение LALR(1)-анализатора

Комментарий: практически совпадает с алгоритмом построения LR(1)-анализатора, за исключением того, что строится по LALR-автомату вместо LR(1)-автомата

Вход

Расширенная грамматика

Выход

LR(1)-анализатор

Алгоритм

Подготовка

Построить LALR-автомат по входной грамматике

Заполнение таблицы ACTION

  1. Занумеровать правила грамматики от 1 до
  2. В строке состояния в столбце заносим допуск
  3. В строках состояний (кроме ) в столбце заносим свертку (), где
  4. В строках , не заполненных ранее, для каждого : Если есть пункт , то в столбце заносим перенос

Заполнение таблицы GOTO

В каждой строке для каждого :

  • Если существует пункт , то в столбце заносим состояние ,
Link to original

Комментарий: всякий LALR-автомат является LR(1)-автоматом (в смысле бесконфликтности соответствующих анализаторов (1, 2))

Следствие:

Замечание: