Формулировка задачи
Расширив грамматику , построить ее LR(0)-автомат:
Решение
Построение расширенной грамматики по
Соответствующая расширенная грамматика строится по определению
Построение LR(0)-автомата по грамматике
Построим по определению
LR(0)-автомат
эпсилон-замыкание автомата LR(0)-пунктов
Link to original
Автомат LR(0)-пунктов
Автоматом LR(0)-пунктов расширенной грамматики называется неполный эпсилон-НКА , где
- — множество LR(0)-пунктов грамматики
Функция переходов задается следующим образом:
Link to original
Построим Автомат LR(0)-пунктов, сразу замыкая состояния по в одно состояние
stateDiagram-v2 [*] --> $$S$$ $$S$$ --> $$D$$ : $$D$$ $$S$$ --> $$L$$ : $$L$$ $$S$$ --> $$a_1$$ : $$a$$ $$L$$ --> #58; : #58; $$L$$ --> $$;$$ : #59; #58; --> $$T$$ : $$T$$ #58; --> $$i$$ : $$i$$ $$;$$ --> $$a_2$$ : $$a$$ classDef finalState fill:#c8e6c9,stroke:#4caf50,stroke-width:3px class D finalState class a1 finalState class T finalState class i finalState class a2 finalState
является LR(0)-грамматикой. Поэтому можем построить ее LR(0)-анализатор с использованием алгоритма построения LR(0)-анализатора
Построение LR(0)-анализатора для грамматики
LR(0)-анализатор
LR-анализатор построенный по LR(0)-грамматике
Link to original
LR-анализатор
LR-анализатором расширенной грамматики называется таблица Action/GOTO, в которой строки соответствуют состояниям какого-то ДКА , построенного по грамматике , столбцы символам из
ACTION GOTO Состояние Множество действий ACTION может быть 4 видов:
- - допуск
- - перенос ( - название состояния в соответсвующем LR(0)-автомате, по которому строится анализатор)
- - свертка (по правилу с номером )
- - ошибка анализа с номером (опционально)
В столбцах нетерминалов GOTO стоят состояния автомата
Вид автомата зависит от вида анализатора, который требуется построить
Link to originalТакже так могут называть автомат с магазинной памятью, который работает по правилам, опирающимся на таблицу анализатора
Алгоритм. Построение LR(0)-анализатора
Вход
Выход
Алгоритм
Построим LR(0)-автомат по входной грамматике (должны уже были построить для проверки, что входная грамматика LR(0)-грамматика)
Заполнение столбцов ACTION
- Занумеровать правила грамматики от одного до
- В строке, соответствующей состоянию в столбце заносим допуск
- В строках, соответствующих состоянию автомата , кроме заполненной ранее (состояние ), в каждом столбце (включая ) заносим свертку ( ),
- В строках , соответствующих состояниям, не заполненным ранее, для заносим перенос , если
Заполнение столбцов GOTO
В каждой строке для заносим состояние , если функция перехода определена
Link to original
Нумерация правил грамматики
| Состояние | ACTION | GOTO | ||||||
|---|---|---|---|---|---|---|---|---|
- - В начале строки допустим только символ
a - - Пустая строка недопустима
- - Символы
aне могут идти рядом - - Символы
aиiне могут стоять рядом - - Строка не может закончиться символом
a - - После
iможет идти только символa - - После символа
:может следовать толькоi - - После символа
iне могут стоять символы