- •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) – таблиц разбора.
31. Lalr(1) – грамматики. Построение lalr(1) – таблиц разбора.
Восходящий алгоритм синтаксического разбора.
Представляет собой расширение алгоритма SLR(1). В ряде случаев работает тогда, когда построение SLR(1) таблицы разбора для данной грамматики невозможно из-за конфликтов сдвиг-приведение или приведение-приведение. Таким образом, класс грамматик, разбираемых по LALR(1) (кр. "LALR(1)-грамматик") шире, чем класс SLR(1)-грамматик.
Буквы "LA" в сокращении означают "lookahead".
Алгоритм собственно разбора (исполнения анализатора по входному потоку) одинаков и у LALR(1), и у SLR(1) - и, шире, у LR(0). Различаются только алгоритмы построения таблицы разбора по грамматике в процессе генерации анализатора.
Описание Пусть есть грамматика, не разбираемая из-за конфликтов сдвиг-приведение или приведение-приведение по алгоритму SLR(1).
В этом случае грамматика преобразуется следующим образом:
ищется нетерминал, на котором возникло вызвавшее конфликт приведение. Обозначим его A.
вводятся новые нетерминалы A1, A2, ..., An, по одному на каждое появление A в правых частях правил.
везде в правых частях правил A заменяется на соответствующее Ak.
набор правил с A в левой части повторяется n раз по разу для каждого Ak.
правила с A в левой части удаляются, тем самым полностью удаляя A из грамматики.
Для преобразованной грамматики (она изоморфна исходной) повторяется попытка построения SLR(1) таблицы разбора.
Действие основано на том, что Follow(A) есть объединение всех Follow(Ak). В каждом конкретном состоянии новая грамматика имеет уже не A, а одно из Ak, т.е. множество Follow для данного состояния имеет меньше элементов, чем для A в исходной грамматике.
Это приводит к тому, что для LALR(1) совершается меньше попыток поставить "приведение" в клеточку таблицы разбора, что уменьшает риск возникновения конфликтов с приведениями, иногда вовсе избавляет от них и делает грамматику, не разбираемую по SLR(1), разбираемой после преобразования.
Множество Follow(Ak) называется lookahead set для A и к-той встречи в правилах, отсюда
LALR(1) и полный LR(1)
Конфликты сдвиг-приведение и приведение-приведение могут остаться и после преобразования грамматики по LALR(1). Это означает, что для данной грамматики необходим полный LR(1) анализатор, который существенно более сложен, но может разбирать любую контексто-свободную однозначную грамматику.
32. LR-разбор для неоднозначных грамматик.
Любая неоднозначная грамматика не может быть LR-грамматикой, однако ряд типов таких грамматик возможно использовать для определения и реализации языков. Для языков конструкций типа арифметических выражений неоднозначные грамматики обеспечивают более краткую и естественную спецификацию по сравнению с эквивалентными однозначными грамматиками. Также имея неоднозначную грамматику, можно определить специальные конструкции путем добавления в грамматику новых продукций.
При попытке построить таблицу LR-анализа по множеству построенному по неоднозначной грамматике возникают конфликты действий (например если множеству FOLLOW принадлежит несколько терминалов по которым должны произойти разные действия). Эта проблема может быть решена с помощью информации о приоритетах и ассоциативности. В данном случае левоассоциативность (правоассоциативность) рассматривается как превосходство левого (правого) оператора одного и того же вида в случае их последовательного применения (напр: id+id+id).
Если в продукциях неоднозначной грамматике есть нетерминалы(группа нетерминалов), которые могут стоять в конце продукции или отсутствовать (например if then else) то возникший конфликт переноса/свертки решается в пользу переноса этого входного символа (else).
В грамматику можно добавить продукции для определения особого случая синтаксической конструкции. Она порождается общим видом грамматики. Добавив такую продукцию, мы порождаем конфликт, он разрешается согласно правилу свертки по такой особой продукции.
Примером
такой особой продукции может случит
определение математической формулы
Продукцией для неё будет иметь вид E
-> E
-> E
‘нижний регистр’ E
‘верхний регистр’ E
(E-
индетификатор). Причиной особой трактовки
этой продукции заключается в том что
символ ‘i’
относится к нетерминалу, а не к символу
k.
(входная последовательность будет
содержать следующую цепочку: a
нижний регистр k
верхний регистр i)
Это отношение важно в математической
записи.
