- •4. Таблица идентификаторов.
- •5. Кэш адресация
- •6. Формальные языки и грамматики.
- •7. Понятие языка
- •8. Запись грамматики в форме Бэкуса-Наура.
- •9. Запись правил грамматики с использованием метасимволов.
- •10. Запись правил гр-ки в граф-м виде
- •11. Классификация грамматик
- •12. Классификация языков.
- •Цепочки вывода
- •Дерево вывода
- •Правила задающие неоднозначность грамматик
- •Распознаватель
- •Задача разбора
- •Этапы семантического анализа
Этапы семантического анализа
1. проверка соблюдения во вх. пр-е сем-х согл-ий входного языка. Данная проверка заключается в сопоставлении входных цепочек пр-ы, с требованием семантики входного языка программирования
а:=в+с
2. дополнение внутреннего представления программы в компиляторе операторами, неявно предусмотренными семантикой входного языка. Данные действия связаны с преобразованием типов операндов выражения и при передаче параметров процедур и функций.
3. проверка элементарных семантических норм языков программирования на прямую не связанных с входным языком.
Данная проверка является сервисной функцией, которую предоставляют большинство современных языков программирования. Выполнение данного согласования не является обязательным.
4. Идентификация лексических единиц языка.
Идентификация переменных, типов, процедур, функций и др. лексических языков программирования – это установление однозначности соответствия между данными объектами и их именами в тексте исходной программы.
Распознаватели регулярных языков:
Распоз-ми регулярных языков явл-ся конечные автоматы, кот-ые задаются как М(Q,V,δ,q0,F)
Q- множество состояний автомата;V- мн-во допустимых символов автомата (алфавит автомата) ;δ-ф-ии переходов; q0-начальное состояние автомата, q0€Q;Fмн-во конечных состояний
Конечный автомат наз-ся полностью определенным ,если в каждом его сост-ии сущ-ет фун-я переходов для всех возможных символов. Автомат работает по шагам или картам. Сост-ие автомата на каждом такте работы опр-ся его конфигурацией: (q,ω,n)
q- текущее сост-ие автомата, q €Q; ω- цепочка входных символов;n-положение указателя во входной цепочке символов. Конфиг-ия на следующем такте р-ти опред-ся как (q’,ω,n+1).δ(*,состояние)=состяние.q’=δ(сим,q).Начальная конф-ия автомата опред-ся след-ей тройкой :( q0,ω,0). Конечная конф-ия автомата: (f,ω,n). Говорят,что конечный автомат принимает цепочку символов, если получив ее на вход он из начального состояния q0 может перейти в одно из конечных состояний из символа f.
Конечные автоматы: определение, конфигурация
Граф переходов конечного автомата
Это направленный граф с символами состояний конечных автоматов в вершинах которых есть дуга (p,q),p,q- сост-я€Q,помоченная символами а€V, если в кон.авт есть ф-я перехода δ(а,p)=q
Способы задания регулярных языков
1 с помощью регулярной грамматики
2. с помощью Конечного автомата
3. с помощью регулярного множества
Мн-во наз-ся замкнутым относительно нек-ой операции, если в рез-те вып-я этой опер-ии над любым элементом мн-ва получается новый элемент, принадлежащий тому же мн-ву.
Регулярные множества (и однозначно связанные с ними регулярные языки) замкнуты относительно следующих операций:
- пересечения;
- объединения;
- дополнения;
- итерации;
- конкатенации;
- гомоморфизма (изменения имён символов и подстановки цепочек вместо символов).
ПРОБЛЕМЫ РАЗРЕШИМЫЕ ДЛЯ РЕГУЛЯРНЫХ ЯЗЫКОВ:
- проблема эквивалентности;
- проблема принадлежности цепочки языку;
- проблема пустоты языка.
Назначения лексических анализаторов
Лексема- это структурная единица языка, к-ая сост-т из элементарных символов языка. Лексический анализатор эта часть компилятора , к-ая читает исходную программу и выделяет в ее тексте лексемы исходного языка. Лексема не явл-ся обязательной частью, но включается в часть компил-ра в состав. Потому что:
Упрощает работу с текстами на этапе анализа и сокращает объем обработанной информации.
Для выделения в тексте и разбора лексем применяется простая и эффективная техника анализа. А на этапе синтаксического анализа используется достаточно сложные сиситемы разбора.
Лексический анализ определяет сложные по конструкции синтакс-ий анализатор от работы непосредственно с текстом исходной прогр-ы, стр-ра кот-го может вальвироваться от версии языка.
Взаимодействие лексического синтаксического анализатора может осущ-ся следующим образом:
Последовательно. Лекс. Анализатор рассм-ет весь текст исходной прогр-ы от начала до конца и преобразует в структурный набор данных, таблицу лексем, в кот-ой ключевые слова индификатора заменят-я на специально оговоренные коды, кроме того устанавливается связь с табл.индиф-ра.
Параллельный. Лексич. Анал-р исходного текста выпол-ся поэтапно так,что синтак-ий анал-тор выполнил разбор очередной конструкции языка обращался к лексическому анализатору за следующей лексемой, при этом указав каждую следует ожидать. В этом случае при возникновении ошибки может произойти «отказ», и только в случае успешного выполнения разбора лексема записывается в таблицу лексем.
Контекстно-свободные языки и грамматики
G(VT,VN,P,S) P: A →VN,A€VN,β€V+=VNυVT
Приведенные грамматики- это КС грамм-ки, к-ые не содержат недостижимых, бесплодных символов ,циклов,λ-правил любых Кс могут привести к приведенному виду.Для преобразования произвольной КС грамматики нужно:
Удалить все бесплодные символы. A€VN.А-наз-ся бесплодным, если из него нельзя вывести ни одной цепочки терминальных символов.
Удалить все недостижимые символы х€( VNυVT).х-наз-ся недостижимым,если он не встречается не в одной синтенц-ой форме грамм-ки.
Удалить все λ-правила: A → λ A€VN
Нужно удалить цепные правила.
Циклический вывод: А=›*А
А→В А,В€ VN
Все удаляется только в этом порядке.
Распознаватели КС языков
Распознавателями для КС-языков являются автоматы с магазинной памятью – МП-автоматы – односторонние недетерминированные распознаватели с линейно ограниченной магазинной памятью (стек).
Определение: R(Q, V, Z, d, q0, z0, F), где
Q - Множество состояний автомата.
V - Множество входных символов.
z - Спец. конечный алфавит магазинных символов автомата.
d - Функция переходов.
z0 – Начальный символ магазина.
F – Множество конечных состояний.
Переход из одного состояния в другое зависит не только от входного символа, но и от одного или нескольких верхних символов в стеке.
(q, «лямда», n)
За 1-й такт работы из стека удаляется верхний символ, соотв. условию перехода и добавляются цепочка, соотв. правилу перехода. 1-й символ цепочки становится верхушкой стека.
Конфигурация автомата на каждом шаге работы опр-ся след образом:
(q,α,ω)α=(β,n). q-текущее состоянее;ω-содержимое стека; β-вся цепочка n-положение указетеля в текущий момент.
При выполнении такта из магазина удал-ся верхний символ соот-ий условию перехода и добавляется цепочка соот-ая правилу перехода. 1-ый символ этой цепочки становится верхушкой стека. Допускается λ-переходы, при кот-х входной символ информируется.Автомат не обязательно извлекает символы из магазина. МП- автомат называются недетерминированным, если из одной и той же конфигурации возможен более чем один переход. Начальная конфиг-ия опред-я след. Образом: (q0,α,z0),а конечная (q,λ,ω). Говорят,что МП автомат допускает цепочку символов, если на вход эту цепочку он может перейти в одну из из конечных конфигураций.МП автомат допускает цепочку с опустошением магазина, если при окончании разбора автомат находится в одной из конечных кофигураций,а стек пуст. Расширенный Мп авт-т м .заменить конечную цепочку длины в верх-ей части стека на другую цепочку сим-в конечной длины.
Распознаватели КС языков с возвратом.
Распозн-ли с возвратом самые примитивные,моделируют работу недерминированного МП автомата.Т.к. моделир-ся работа недермин-го автомата,значит на некотором шаге работы возм-но возн-ние неск-х допустимых след-х состояний автомата.Исп-ся 2 варианта реализации:
На каждом шаге работы, алгоритм должен запоминать все возможные следующие состояния, выбирать одно, переходить и т.д. до тех пор пока не будет конечного состояния, иначе автомат не перейдет в такую конфигурацию,переходы из которой не определены.. Время вып-я алгоритма имеет экспоненциальную зав-ть от длины вх цеп символов.Необх объем памяти линейно зависит от длины исх цепочки символов.
На каждом шаге при возникновении неоднозначности запускается новая копия для обработки каждого состояния. Время линейно зависит,объем памяти – экспоненциально.
Ос-сть модел-ния произв-го МП автомата закл в след:разбор может не завершиться за конечное число шагов.Для искл подобных ситуаций алг-мы разбора с возвратами строятся не для произв-ных МП автоматов,а для МП авт-тов,удовл-щих некот-м заданным условиям.
Нисходящийся распознаватель с возвратом(подбором альтернати)в
Данный расп-ль моделирует работу МП автомата с одним состоянием.
q: R({q},V,z,δ,q,S,{q})
Нач конфигурация (q,α,S) опр-ся след образом:авт-т нах-ся в своем ед-ном состоянии q, считывающая головканах-ся вначале вх цеп символов. В стеке лежит символ соотв-ий целевому символугр-ки.
Конечная конфигурация (q,,) авт-т нах-ся в ед-ном состоянии q,считыв головка нах-ся за пределами цеп символов,в стеке ничего не содержится.
Работа алгоритма с использованием псевдокодов.
если на верхушке стека нах-ся символ АVN
то А можно заменить на цеп символов α (А→αР) и считывающая головка не сдвигается – этот шаг наз «подбор альтернатив»
все если
если на верхушке стека нах-ся символ аVT: а=текущий символ входной цепочки символов
то а можно выбросить из стека и передвигаем сг→1, этот шаг наз выброс.
всё если
Решение о том,какой щаг нужно вып-ть принимается однозначно.Модел-щий алг-м должен обеспечить выбор 1-ой из возм-х альтернатив и хранение инф-ии о том,какие альтернативы и на каком шаге были выбраны.
Данный МП автомат строит левосторонние выводы,читает цепочку вх символов слева-направо, поэтому построение дерева-вывода идет сверху-вниз.грамматика должна быть леворекурсивной.
Символ АVN наз рекурсивным,если для него существует цепочка вывода А=>+αAβ
α=λ β≠λ левая рекурсия
α≠λ β=λ правая рекурсия
α=λ β=λ образуется цикл
недостаток: значительная временная емкость,т.к. имеется экспоненциальная зав-ть,необх-х для работы алг-ма выч-х ресурсов.
Преим-ва:1)простота реализации 2) универсальность
Принцип работы восходящего распознавателя по алгоритму «сдвиг-свертка»
Данный расп-ль модел-ет работу расширенного МП автомата R({q},V,z,δ,q,S.{qi}). Начальная конф-ия данного МП автомата опр-ся (q,α,λ). Конечная (q,λ,S)
Реализация алгоритма с исп-ем псевдокода:
если на верхушке стека нах-ся цепочка символов γ
то γ заменяется на АVN(A→γP) (данный шаг наз свертка)
всё если
если считывающая головка в стек и передвинуть счит головку на 1 позицию справа
все если
Данный РМП автомат строит правосторонним выводом и читает цепочку слева-направо, поэтому построение дерева идет снизу-вверх и наз восходящим распознавателем с возвратом.
Недостаток:знач-ная временная емкость. Преимущество:а)простота реализации б)универсальность.
Распознаватели КС языков без возврата
Существует 2 класса:
1)нисходящие расп-ли порождает цепочки левостороннего вывода сверху вниз,строит дерево вывода сверху вниз и исп-ют модификацию алгоритма с подбором альтернатив. К этому классу отн-ся следующие:а)расп-ль на основе рекурсивного цикла б) расп-ль U(K) в)расп-ль U(S)
2)восходящие цепочки порождают цепочки правостороннего вывода,исп-ют модификацию алг-ма сдвиг-свертка
а)расп-ль на основе 2R(K) б)расп-ль 2R(0) в) расп-ль 2R(1)
Распознаватель на основе грамматик предшествования
Принцип орг-ии таких расп-лей основан на том,что для каждой упоряд-ой пары символов грамматики,устан-ся отношения предшествования.
Грамматика предшествования:1)грамм-ка простого предшествования 2) расширенное предшествование 3)слабого предшествования 4)смешанной стратегии предшествования 5)грамм-ки опре-го предшествования
Самые распространенные и простые 1 и5. Грам-ка прямого предшествования – это такая приведенная КС грамматика G(VT,VN,P,S) в которой:1)для каждой упорядоченной пары VT и VN вып-ся не более,чем одно из 3-х отношений предшествования 2)различные порождающие правила должны иметь разные правые части
Метод предшествования основан на том факте,что отн-ия предш-я м/у 2-мя ?? сим-ми распознаваемой строки соот-т 3-м вариантам:
1)Fi=Fi+1 если символы Fi и Fi+1 принадлежат одной основе
2) Fi<Fi+1 Если Fi крайний левый символ некоторой основы
3) Fi>Fi+1 если Fi есть крайний правый символ некоторой основы.
Далее строится матрица предш-ия.
Недостаток:не всякий детерминированный КС язык м.б. задан грамм-кой простого предшествования; если если в грамм-ке много терм-х и нетерм-х символов,то увел-ся матрица предш-я
Грамматика операторного предш-я – это приведенная КС грамм-ка, в которой правая частьвсех правил не содержит смежные нетерм символов и для которого отн-я предш-я задаются на мн-ве VT ,включая символы начала и конца.
Свойства КС языков
КС языки замкнуты отно-но: подстановки,объединения,контетенации,итерации
КС языки не замкнуты отн-но:пересечения,дополнения
Детерм-ные КС языки замкнуты отн-но дополнения и не замкн отн-но объединения и пересечения.
Назначение синтаксических анализаторов.
Осн-ые функции:1)найти и выделить осн-е синтакс-ие констр-ции 2)уст-ть тип и проверить прав-ть синтакс-ой каждой констр-ции 3)представить синтакс-ие констр-ции в виде удобном для дальнейшей генерации текста.
Дерево операций.
В синтакс-м дереве все вершины соотв-ют операциям, а листья операндам,как правило, листья синтакс-го дерева связаны с записыми табл идентификаторов.
Генерация объектного кода – это перевод компилятора внутреннего представления программы в цепочку символов выходного языка на язык машинных команд.
Генерацию объектного кода можно выполнять после того, как выполнили синтаксический анализ, распределено адресное пространство, проверили на соответствие имен, типов переменных и констант и т.д.
Синтаксически управляемый(СУ) перевод это основной метод порождения кода результирующей программы на основании результата синтаксического анализа.
Суть СУ-перевода заключается в следующем: с каждой вершины дерева синтаксического разбора n связываются цепочно некоторого промежуточного кода C(N). Код для вершины N строится путем сцепления в конкретной последовательности кода с C(N) и последовательности кодов, связанных со всеми вершинами, являющимися прямыми потомками N.
Процесс перевода идет снизу вверх, в строго установленном порядке, определяемом в структуре дерева.
Если в компиляторе фазы синтаксического анализа и генерации кода, объединены в одну, то для таких компиляторов используется термин СУ-компиляция. СУ-компилятор можно реализовать не для всех языков, а СУ-перевод для всех.
Способы внутр-го представления прогр-ам.
Синтакс-ое дерево – это стр-ра предст-ая собой рез-тат работы синт-кого анализ-ра. Она отражает синтаксис конструкции вх языка и явно содержит в себе полную взаимосвязь операций.
Нед-ок: Поск-ку синт-кие деревья предст-ют собой сложные связанные стр-ры, поэтому они не м\быть тривиальным образом преобразованы в лин-ую послед-ть команд результир-ей проги.
Многоадресный код с явно именуемым результатом.(Тетрады). Тетрады предст-ют собой запись операций сост-ей из 4 составляющих: <операция>(<операнд1><операнд2><результат>). Тетрады предст-ют собой лин-ю послед-ть команд, выч-ся послед-но одна за другой. Если какой-то из операндов отст-ет, то он м\быть опущен или заменен пустым операндом. Рез-тат выч-ия не м\быть опущен. Поск-ку тетрады предст-ют лин-ую завис-ть, поэтому для них дост-но просто написать тривиальный алгор-м, кот-ый будет преобраз-ть послед-ть тетрад в послед-ть команд. Такая форма предст-ия не зависит от архит-ры выч-ой сис-мы на кот-ую ориентирована.
Машинно независимая форма
1)Треб больше памяти,чем триады 2)не отражают явно взаимосвязь операций м/у собой
Многоадресный код с неявно именуемым рез-том. (триады)
<операция>(<операнд1><операнд2>)
Триады предст-ют собой записи операций в 3-х состояниях. Особенностью триад яв-ся то, что один или оба операнда м\быть ссылками на другую триаду. В отличии от тетрад здесь треб-ся наличие алг-ма отвеч-го за распред-ие памяти (для хран-ия промеж-ых рез-ов выч-ия). Триады требуют меньше памяти для своего представления, они явно отражают взаимосвязь операций между собой.
Преимущества:1)т,к, триады предст собой лин-ю послед-ть команд,то для них достаточно просто написать алг-м преобр-ия послед-ти триад в посл-ть команд рез-щей программы.Здесь необх исп-ть спец алг-м, отвеч-щий за распределение памяти,необх-ой для хранения промеж-х рез-в выч-я.
Машинно независимая форма внутр предст программ.Дост-ва:ребует меньше памяти для своего предст-ния;явно отражает взаимосвязь операций между собой.
Ассемблерный код и машинные команды.
Машинные команды удобны тем, что при исп внутр-ее предст-ие прог-мы полностью соответс-ет объектному коду и сложные преобразования не требуются.
Команды ассемблера это форма записи машин-х команд, Здесь треб-ся доп-ные стр-ры для отобр-ия и взаимосвязи операций. Данная форма – машинно зависимая форма прелст-ия программ.
Обратная польская запись операции. Это постфиксная запись операции. По сравнению с инфексной записью операции, в польской записи операнды следуют в том же порядке, а знаки операции строго в порядке их выполнения. Для выч-ия исполь-ся стек. Нед-ок: Поск-ку нам доступна верхушка стека,то выраж-ия не поддаются оптимизации.Выр-ия просматриваются слева-направо и встреч-ся эл-ты, обраб-ся по след правилам:
Алгоритм:
Если встечается знак операнд, то он помещ-ся в стек (становится верхушкой стека)
Если встреч-ся знак унарной операции, то один операнд вытаскивается из стека,опер-я вып-ся и рез-тат занос-ся в верх-ку стека.
Если встеч-ся знак бинарной операции, то из стека вытаскивается 2 операнда, вып-ся операция и рез-т помещается в стек.
Общие принципы оптимизации кода.
Оптими-я проги – обр-ка связ-ая с переупорядочиванием и изм-нием операций в комп-ой программе с целью получения более эфф-ной результир-ей объектной программы. Оптим может вып-ся неск-ко раз,по фазе подготовки генерации кода и по фазе генерации кода. В качестве показ-лей эфф-ти результир проги исп-ся след критерии: 1)объем памяти,необх-ый для вып-я результир проги 2)скорость вып-я проги
Различают 2 осн-х вида оптимизации преобр-я: 1)преобр-ие исх проги в форме её внутр представления, незав-й от рез-го объект-го кода 2)данные преобр-ия не зависят от архитектуры целевой выч-ой системы. Они основаны на хорошо известных и обоснованных матем-х и логич-х преобр-ях,произвед-х над внутр предст-ем проги 3)преобразование результир-ей объектной проги
Данная группа преобр-ий зависит от арх-ры целевой выч системы
Оптим-я может вып-ся для след типовых синтакс-х конструкций:1)линейние участки программ; 2)логические выражения 3)циклов 4)вызовов процедуры функций