- •3. Опорный конспект лекций
- •3.1. Введение, определение языка
- •3.1.1. Элементы теории языка и их грамматика. Символы, цепочки и операции над ними
- •Формальное определение языка
- •3.1.3. Отношения и операции над ними
- •3.1.4. Требования, предъявляемые к грамматикам
- •Способы представления синтаксиса языка. Задание бесконечного текста конечными средствами. Проблема разбора. Классификация языков
- •3.2. Сканеры (лексические анализаторы)
- •3.2.1. Автоматные грамматики и диаграмма состояний
- •Регулярные выражения и конечные автоматы
- •Недетерминированные конечные автоматы
- •3.3. Грамматики простого предшествования
- •3.3.1. Простые предшествования.
- •Отношения предшествования и их вычисление
- •Операторное предшествование
- •Вычисление отношений операторного предшествования. Алгоритм разбора на основе операторного предшествования
- •3.3.5. Предшествование более высокого порядка
- •3.3.6. Способ представления грамматики в оп
- •3.3.7. Предшествование более высокого порядка
- •3.3.8. Ограниченный контекст
- •Определение 1:1 ограниченного контекстного распознавателя
- •Алгоритм 1:1 ограниченного контекстного преобразователя
- •Примеры разбора цепочек по алгоритму 1:1 ограниченного контекстного преобразователя
- •Определение m: n - ограниченного контекста
- •3.4. Автоматы с магазинной памятью, [ мп-автомат ]
- •Операции над магазином:
- •Операции над состоянием:
- •Операции над входной цепочкой:
- •Автомат задаётся:
- •Варианты мп-автоматов (доопределение)
- •Эквивалентность мп-автоматов и кс-грамматик
- •Мп, работающий снизу вверх
- •Формальное определение для левой свертки
- •Восходящий распознаватель
- •Детерминированный мп-автомат
- •Проблема зацикливания
- •3.4.1. Общие методы синтаксического анализа.
- •Вопросы для самопроверки
- •Нисходящий разбор
- •Нисходящий преобразователь (распознаватель)
- •Моделирование мп –преобразователя. Нисходящий анализ с возвратом Синтез процедуры
- •Нисходящий разбор в терминах грамматик
- •Алгоритм нисходящего разбора
- •Пример:
- •Алгоритм восходящего разбора
- •3.4.2. Польская запись, тетрады, триады, деревья.
- •Перевод индексной записи в тетрады
- •3.5. Теория перевода
- •3.5.1. Формализмы определения перевода
- •3.5.2. Синтаксически управляемый перевод
- •3.5.3. Конечные преобразователи. (Простейший транслятор)
- •3.5.4. Преобразователи с магазинной памятью
- •Лабораторная работа №7 Поиск основы в грамматиках простого предшествования
- •5. Контроль знаний
- •Глоссарий
3.1.3. Отношения и операции над ними
Пусть есть 2 отношения: aRb и aPb, где a,bÎA. Рассмотрим отношение RP и назовем его произведением отношений R и P.Отношение RP имеет место тогда и только тогда, когда на множестве A есть элемент c , для которого выполняется aRc и cPb.Тогда между a и b есть отношение RP, т.е. aRPb.
Пример: aRb: b=a+1; aPb: b=a+2
Из этих двух предложений следует, что aRPb b=a+3
Отыскать n-ю степень отношения R на множестве A означает найти такое подмножество элементов c1…cn, для которых выполняется отношение: aRc1,c1Rn-1b,c1Rc2,c2Rn-2b… .
n-1 степень R получила название транзитивного замыкания отношения R и обозначается – R+:
R+=R1ÈR2ÈR3È…
R*=R0ÈR1ÈR2È…
R0-единичное отношение (aR0b означает a=b).
R*– рефлексивно-транзитивное замыкание отношения R.
Пусть задана грамматика и нетерминальный символ – U. Необходимо отыскать множество головных символов цепочек, выводимых из U.(т.е.UÞ+Sx).
Префикс U обозначается как SPRU.
Отношение SPRU имеет место Û,когда в грамматике есть правило U=S…
Чтобы отыскать транзитивное замыкание отношения Þ+, должны иметь место выводы :UÞS1…ÞS2…Þ…ÞSn…Þ.
3.1.4. Требования, предъявляемые к грамматикам
Пусть дана грамматика G{V, S, P, Z}.
Чтобы появиться в в выводе какого-либо предложения, нетерминальный символ должен встретиться в некоторой сентенциальной форме. Из этого нетерминального символа должна выводиться цепочка UÞ + t,содержащая только терминальные символы.
tÎS+;
V- нетерминальные символы;
S-терминальные символы;
Из любого нетерминального символа, принадлежащего словарю, должна выводиться цепочка, содержащая терминальные символы.
Для того чтобы имело место первое правило, нетерминальный символ из множества V должен хотя бы раз встретиться в сентенциальной форме.
Способы представления синтаксиса языка. Задание бесконечного текста конечными средствами. Проблема разбора. Классификация языков
Синтаксические деревья и неоднозначность
Синтаксическое дерево – это граф без контуров и петель, где корневой вершине поставлен в соответствие начальный символ.
Куст символа – это множество подчинённых ему символов.
Имя куста – это нетерминальный символ.
При чтении слева направо концевые вершины образуют цепочку, вывод которой дан этим деревом.
Пример: Выведем предложение (i+i)i.
Левосторонний вывод – это такой вывод, при котором на каждом шаге заменяется самый левый символ.
Используем правила из примера:
E=>T=>T*F=>F*F=>(E)*F=>(E+T)F=>(T+T)F=>(F+T)F=>(i+T)F=>(i+F)F=>(i+i)F=>(i+i)i .
Правосторонний вывод:
E=>T=>T*F=>F*F=>(E)F=>(E+T)F=>(T+T)F=>(F+T)F=>(i+T)F=>(i+F)F=>(i+i)F=>(i+i)i .
Рассмотрим грамматику : E:=E+E|E*E; E:=i.
Нужно вывести предложение i+i*i . Рассмотрим 2 дерева:
+ *
* +
Из обоих этих деревьев выделяется нужная цепочка. В этом случае для построения цепочки есть альтернатива, в отличие от предыдущего примера. Эта грамматика неоднозначная. Критерием неоднозначности являются различные деревья.
Если какое-либо предложение, генерированное грамматикой, имеет более 1-го дерева разбора, то говорят, что грамматика неоднозначна. Задача установления неоднозначности в какой-либо грамматике неразрешима, т.е. не существует алгоритма, который бы за конечное число шагов, рассмотрев предложение, ответил бы – однозначна грамматика его породившая, или нет.
Задачи разбора заключаются в том, чтобы распознать: принадлежит ли предложение языка программирования рассматриваемой грамматике. Различают 2 категории алгоритмов: нисходящий (развертка) и восходящий (свертка).
Итеративная форма задания грамматик
Цель: создание бесконечного числа цепочек конечным (минимальным) количеством правил. Вводится мета-символ { }, который означает: элемент, находящийся внутри { }, может повторяться многократно.
E:=E+T|T эквивалентно E:=T{+T}0.
Классификация языков
Классификацию языков ввел Хомский. В терминах формальных грамматик определяется 4 основных класса:
грамматика типа 0 порождает язык с фразовой структурой (естественные языки).
U+: = V*, где UÎ V È S, U+Î{ V È S }+.
грамматика типа 1 – контекстно-зависимая или контекстно-чувствительная.
xUy: = xuy , где UÎV, uÎ{ V È S }+.
грамматика типа 2 – контекстно-свободная.
U: = u, где UÎV, uÎ{ V È S }*.
грамматика типа 3 – регулярная (автоматная).
Q: = RT|T, где Q,RÎV, TÎS.
Языки, порождаемые автоматной грамматикой, получили название регулярных множеств.