
- •2. Недетерминированный конечный автомат: формальное определение, построение множества достижимых состояний.
- •4. Преобразование недетерминированного конечного автомата в детерминированный.
- •6. Контекстно-свободные языки. Вывод. Дерево вывода.
- •8. Метод грамматического разбора сверху - вниз. Ll(1) – грамматики.
- •10. Левая факторизация.
- •12. Построение множества follow
- •14. Алгоритм работы таблично управляемого анализатора для ll(1) – грамматики.
- •32. Генератор компиляторов уасс. Использование неоднозначных грамматик.
- •18. Разбор методом «сдвиг – свертка» (shift – reduce) на основе стека.
- •24. Алгоритм заполнения таблиц разбора для slr (1) анализатора.
- •28. Построение абстрактного синтаксического дерева.
- •22. Каноническая совокупность множеств ситуаций.
- •34. Автомат с магазинной памятью. Допустимость по заключительному состоянию и по пустому магазину.
- •36. Lr(1) анализ. Lr(1)-ситуация. Замыкание множества ситуаций. Определение переходов.
- •16. Построение отношения предшествования операторов исходя из их ассоциативности и приоритета. Алгоритм разбора для грамматик простого предшествования.
- •38. Lalr(1) – грамматики. Построение lalr(1) – таблиц разбора.
- •1. Операции над языками. Регулярные выражения.
- •4) Положительное замыкание Клини (без пустой строки):
- •3. Преобразование регулярных выражений в недетерминированный конечный автомат
- •5. Минимизация детерминированного конечного автомата.
- •13. Построение таблицы разбора для ll(1) – грамматики
- •7. Контекстно-свободные грамматики для регулярных языков.
- •11. Построение множества first
- •9. Исключение левой рекурсии.
- •15. Грамматики простого предшествования. Использование отношения предшествования операторов
- •21. Алгоритм вычисления замыкания множества ситуаций (Closure).
- •17. Синтаксический анализ снизу – вверх. Основа. Подрезка основы.
- •19. Активный префикс. Обосновать, что основа всегда формируется в вершине стека.
- •27. Синтезируемые атрибуты. Их обработка в алгоритме сдвиг–свертка.
- •23. Переходы в slr (1) анализаторе. Функция goto. Допустимая ситуация.
- •29. Наследуемые атрибуты. Граф зависимостей.
- •25. Алгоритм lr – разбора.
- •33. Автомат с магазинной памятью. Графическое представление автомата с магазинной памятью. Вычислительный процесс в мп – автомате.
- •37. Lr(1) анализ. Заполнение таблиц lr-разбора
- •35. Типы и проверка типов.
- •26. Контекстно–зависимый анализ. Синтаксически управляемая трансляция.
24. Алгоритм заполнения таблиц разбора для slr (1) анализатора.
Таблица action в зависимости от пары <входной сигнал, состояние> определяет, достигнут ли конец основы. Если конец основы достигнут, то выполняется приведение, в противном случае выполняется сдвиг.
Таблица goto в зависимости от пары <нетерминал в вершине стека, состояние> определяет состояние конечного автомата после выполнения приведения.
Алгоритм заполнения таблиц анализа заключается в следующем.
1. Построить каноническую совокупность множества ситуаций.
2. Каждое множество I канонической совокупности определяет состояние конечного автомата с соответствующим номером, а следовательно, строку в таблицах анализа. Ячейки в таблице заполняются по следующим вариантам:
а) если ситуация [Aa] принадлежит множеству Ii и существует переход по терминалу a в некоторое множество Ij, то в ячейку action[i, a] заносим значение shift j. В приведенной ситуации основа не может быть найдена, так как для ее завершения как минимум необходимо распознать терминал a, то есть выполнить сдвиг;
б) если ситуация [A] принадлежит множеству Ii, то для всех терминалов а, принадлежащих follow(A), в ячейку action[i, a] заносим значение reduce A. Это происходит потому, что основа найдена полностью и распознавание любого символа, следующего за А, должно повлечь приведение основы;
в) если ситуация [SS] принадлежит множеству Ii, то есть можно осуществить редукцию для стартовой продукции, то в ячейку action[I, eof] записываем значение accept. Разбор успешно закончен, если достигнут конец входной последовательности.
3. Если существует переход из множества Ii во множество Ij по некоторому нетерминалу А, то в ячейку goto[i, А] заносим значение j.
4. Все незаполненные ячейки в таблицах action и goto заполняем значением «ошибка».
5. Начальным состоянием автомата является состояние, содержащее ситуацию [SS].
28. Построение абстрактного синтаксического дерева.
Транслятор на основе текста программы формирует некоторый промежуточный код. Этот код м.б. абстрактным синтаксическим деревом (АСД).
А
СД
– это абстрактное представление
конструкций языка, полученное из дерева
разбора. Обычно в АСД ключевые слова и
операторы не представляются в качестве
листьев,
они связываются
с внутренним узлом, который выступает
в дереве разбора родительским для этих
листьев. Другое упрощение, используемое
в синтаксических деревьях, заключатся
в том, что цепочка для одиночных продукций
могут быть свернуты так:
Также АСД - это абстрактное представление конструкции языка, полученное из дерева разбора. В этом дереве есть инф-ция, необходимая для распознавания синтаксиса языка и информация о структуре предложения.
Если есть выражение a*5+b: его представление в памяти
Построение синкт. деревьев для выражений подобно трансляции выражений в постфиксный вид. Мы строим поддеревья для подвыражений путем создания узлов для каждой операции и операндов. Узлы, дочерни по отношению к узлу операций, являются корнями поддеревьев для подвыражений, образующих операнды данной операции. Каждый узел в синтаксическом дереве может быть реализован как запись с несколькими полями. В узле операции одно поле идентифицирует операцию, а остальные поля содержат указатели на узлы операндов. Рассмотрим функции, которые можно применять для создания узлов: mknode(op,left,right) – создает узел операции с меткой op и двумя полями, содержащими указатель на left и right. mkleaf(id, entry) создает узел идентификатора с меткой id b и полем, содержащим entry, указатель на запись для этого идентификатора в таблице символов. mkleaf(num, val) – создает узел числа с меткой num и полем, содержащим val – значение числа. С помощью этих функций можно построить дерево для выражений (напр a-4+c)