- •1. Операции над языками. Регулярные выражения.
- •4) Положительное замыкание Клини (без пустой строки):
- •2. Недетерминированный конечный автомат: формальное определение, построение множества достижимых состояний.
- •3. Преобразование регулярных выражений в недетерминированный конечный автомат
- •4. Преобразование недетерминированного конечного автомата в детерминированный.
- •5. Минимизация детерминированного конечного автомата.
- •6. Контекстно-свободные языки. Вывод. Дерево вывода.
- •7. Контекстно-свободные грамматики для регулярных языков.
- •9. Исключение левой рекурсии.
- •8. Метод грамматического разбора сверху - вниз. Ll(1) – грамматики.
- •10. Левая факторизация.
- •11. Построение множества first
- •12. Построение множества follow
- •14. Построение таблицы разбора для ll(1) – грамматики
- •15. Алгоритм работы таблично управляемого анализатора для ll(1) – грамматики.
- •16. Грамматики простого предшествования. Использование отношения предшествования операторов
- •17. Построение отношения предшествования операторов исходя из их ассоциативности и приоритета. Алгоритм разбора для грамматик простого предшествования.
- •18. Синтаксический анализ снизу – вверх. Основа. Подрезка основы.
- •19. Разбор методом «сдвиг – свертка» (shift – reduce) на основе стека.
- •20. Активный префикс. Обосновать, что основа всегда формируется в вершине стека.
- •22. Алгоритм вычисления замыкания множества ситуаций (Closure).
- •23. Каноническая совокупность множеств ситуаций.
- •24. Переходы в slr (1) анализаторе. Функция goto. Допустимая ситуация.
- •25. Алгоритм заполнения таблиц разбора для slr (1) анализатора.
- •26. Алгоритм lr – разбора.
- •33. Контекстно–зависимый анализ. Синтаксически управляемая трансляция.
- •34. Синтезируемые атрибуты. Их обработка в алгоритме сдвиг–свертка.
- •35. Построение абстрактного синтаксического дерева.
- •36. Наследуемые атрибуты. Граф зависимостей.
- •42. Генератор компиляторов уасс. Использование неоднозначных грамматик.
- •43. Автомат с магазинной памятью. Графическое представление автомата с магазинной памятью. Вычислительный процесс в мп – автомате.
- •44. Автомат с магазинной памятью. Допустимость по заключительному состоянию и по пустому магазину.
- •35. Типы и проверка типов.
- •27. Lr(1) анализ. Lr(1)-ситуация. Замыкание множества ситуаций. Определение переходов.
- •30. Lr(1) анализ. Заполнение таблиц lr-разбора
- •31. Lalr(1) – грамматики. Построение lalr(1) – таблиц разбора.
19. Разбор методом «сдвиг – свертка» (shift – reduce) на основе стека.
Анализатор пытается строить дерево разбора для входной последовательности, начиная с листьев и работая по направлению к корню дерева (вверх). Этот процесс можно рассматривать как свертку строки w к стартовому символу грамматики.
Этот метод, как и LL(1) анализатор использует стек. В самом начале лежит $ и буфер в котором содержится входная последовательность в конце которой лежит $-конец. В процессе работы выполняются следующие команды: сдвиг (входная последовательность переносится в стек) свертка (когда в стеке образуется необходимая часть правила и происходит замена); допуск (успешное завершение разбора)
В процессе работы синтаксический анализатор может найти ошибку, тогда вызывается команда ошибки, эта команда пытается восстановить процесс разбора и продолжить дальше.
Структура анализатора:
В процессе анализа используется стек, в котором хранятся пары вида xiSi, где xi – символ терминал или нетерминал грамматики, а Si – символ, характеризующий состояние автомата. Каждый символ состояния выражает информацию, содержащуюся в стек ниже него, а комбинация символа состояния в вершине стека и текущего символа входной последовательности используется для индексации таблиц анализа. В итоге совокупность xi в стеке содержит префикс правой сентенциальной формы. Комбинация состояний и текущего символа входной последовательности определяет действие на данном шаге разбора. В начале стек содержит начальное состояние и знак дна стека $. Алгоритм процедуры LR разбора: Чтение состояния хранящееся в вершине стека и текущий символ входной последовательности. Используя эти значения из таблицы action выбирается команда синтаксического анализатора. Таблица Goto содержит состояния, когда переход происходит по нетерминалу.
В алгоритме использование стека оправдано потому, что правая часть продукции в стеке может сформироваться только на поверхности.
Для нашего алгоритма будет использоваться стек для хранения начальной последовательности сентенциальной формы и входной буфер для исходной строки.
Стек
Буфер
$ W$
Анализ работы:
1. Сдвигают 0 или более символов из буфера в стек, так чтобы в вершине стека оказалась основа В, затем сворачивает В нетерминалами левой части правила. Этот процесс повторяется до тех пор, пока не будет обнаружена ошибка или не возникает конфигурация стеке $S, а в буфере $.
Стек
Буфер
$ S $
Этот алгоритм должен выполнить 4 операции:
1)Сдвиг-символ из буфера заносим в стек.
2)Свертка-анализатор определяет, что в стеке находится основа, затем на левую часть правила.
3)Принимается, когда анализатор обнаруживает, что состояние соответствует успешному разбору.
4)Ошибка – обнаруживается ошибки и запускается приложение обработки ошибки.
Самое важное- нахождение основы.
