Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по СПО1.doc
Скачиваний:
59
Добавлен:
02.05.2014
Размер:
473.6 Кб
Скачать

Этапы семантического анализа

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. с помощью регулярного множества

Мн-во наз-ся замкнутым относительно нек-ой операции, если в рез-те вып-я этой опер-ии над любым элементом мн-ва получается новый элемент, принадлежащий тому же мн-ву.

Регулярные множества (и однозначно связанные с ними регулярные языки) замкнуты относительно следующих операций:

- пересечения;

- объединения;

- дополнения;

- итерации;

- конкатенации;

- гомоморфизма (изменения имён символов и подстановки цепочек вместо символов).

ПРОБЛЕМЫ РАЗРЕШИМЫЕ ДЛЯ РЕГУЛЯРНЫХ ЯЗЫКОВ:

- проблема эквивалентности;

- проблема принадлежности цепочки языку;

- проблема пустоты языка.

Назначения лексических анализаторов

Лексема- это структурная единица языка, к-ая сост-т из элементарных символов языка. Лексический анализатор эта часть компилятора , к-ая читает исходную программу и выделяет в ее тексте лексемы исходного языка. Лексема не явл-ся обязательной частью, но включается в часть компил-ра в состав. Потому что:

  1. Упрощает работу с текстами на этапе анализа и сокращает объем обработанной информации.

  2. Для выделения в тексте и разбора лексем применяется простая и эффективная техника анализа. А на этапе синтаксического анализа используется достаточно сложные сиситемы разбора.

  3. Лексический анализ определяет сложные по конструкции синтакс-ий анализатор от работы непосредственно с текстом исходной прогр-ы, стр-ра кот-го может вальвироваться от версии языка.

Взаимодействие лексического синтаксического анализатора может осущ-ся следующим образом:

  1. Последовательно. Лекс. Анализатор рассм-ет весь текст исходной прогр-ы от начала до конца и преобразует в структурный набор данных, таблицу лексем, в кот-ой ключевые слова индификатора заменят-я на специально оговоренные коды, кроме того устанавливается связь с табл.индиф-ра.

  2. Параллельный. Лексич. Анал-р исходного текста выпол-ся поэтапно так,что синтак-ий анал-тор выполнил разбор очередной конструкции языка обращался к лексическому анализатору за следующей лексемой, при этом указав каждую следует ожидать. В этом случае при возникновении ошибки может произойти «отказ», и только в случае успешного выполнения разбора лексема записывается в таблицу лексем.

Контекстно-свободные языки и грамматики

G(VT,VN,P,S) P: A →VN,A€VN,β€V+=VNυVT

Приведенные грамматики- это КС грамм-ки, к-ые не содержат недостижимых, бесплодных символов ,циклов,λ-правил любых Кс могут привести к приведенному виду.Для преобразования произвольной КС грамматики нужно:

  1. Удалить все бесплодные символы. A€VN.А-наз-ся бесплодным, если из него нельзя вывести ни одной цепочки терминальных символов.

  2. Удалить все недостижимые символы х€( VNυVT).х-наз-ся недостижимым,если он не встречается не в одной синтенц-ой форме грамм-ки.

  3. Удалить все λ-правила: A → λ A€VN

  4. Нужно удалить цепные правила.

Циклический вывод: А=›*А

А→В А,В€ 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 варианта реализации:

  1. На каждом шаге работы, алгоритм должен запоминать все возможные следующие состояния, выбирать одно, переходить и т.д. до тех пор пока не будет конечного состояния, иначе автомат не перейдет в такую конфигурацию,переходы из которой не определены.. Время вып-я алгоритма имеет экспоненциальную зав-ть от длины вх цеп символов.Необх объем памяти линейно зависит от длины исх цепочки символов.

  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)т,к, триады предст собой лин-ю послед-ть команд,то для них достаточно просто написать алг-м преобр-ия послед-ти триад в посл-ть команд рез-щей программы.Здесь необх исп-ть спец алг-м, отвеч-щий за распределение памяти,необх-ой для хранения промеж-х рез-в выч-я.

Машинно независимая форма внутр предст программ.Дост-ва:ребует меньше памяти для своего предст-ния;явно отражает взаимосвязь операций между собой.

Ассемблерный код и машинные команды.

Машинные команды удобны тем, что при исп внутр-ее предст-ие прог-мы полностью соответс-ет объектному коду и сложные преобразования не требуются.

Команды ассемблера это форма записи машин-х команд, Здесь треб-ся доп-ные стр-ры для отобр-ия и взаимосвязи операций. Данная форма – машинно зависимая форма прелст-ия программ.

Обратная польская запись операции. Это постфиксная запись операции. По сравнению с инфексной записью операции, в польской записи операнды следуют в том же порядке, а знаки операции строго в порядке их выполнения. Для выч-ия исполь-ся стек. Нед-ок: Поск-ку нам доступна верхушка стека,то выраж-ия не поддаются оптимизации.Выр-ия просматриваются слева-направо и встреч-ся эл-ты, обраб-ся по след правилам:

Алгоритм:

  1. Если встечается знак операнд, то он помещ-ся в стек (становится верхушкой стека)

  2. Если встреч-ся знак унарной операции, то один операнд вытаскивается из стека,опер-я вып-ся и рез-тат занос-ся в верх-ку стека.

  3. Если встеч-ся знак бинарной операции, то из стека вытаскивается 2 операнда, вып-ся операция и рез-т помещается в стек.

Общие принципы оптимизации кода.

Оптими-я проги – обр-ка связ-ая с переупорядочиванием и изм-нием операций в комп-ой программе с целью получения более эфф-ной результир-ей объектной программы. Оптим может вып-ся неск-ко раз,по фазе подготовки генерации кода и по фазе генерации кода. В качестве показ-лей эфф-ти результир проги исп-ся след критерии: 1)объем памяти,необх-ый для вып-я результир проги 2)скорость вып-я проги

Различают 2 осн-х вида оптимизации преобр-я: 1)преобр-ие исх проги в форме её внутр представления, незав-й от рез-го объект-го кода 2)данные преобр-ия не зависят от архитектуры целевой выч-ой системы. Они основаны на хорошо известных и обоснованных матем-х и логич-х преобр-ях,произвед-х над внутр предст-ем проги 3)преобразование результир-ей объектной проги

Данная группа преобр-ий зависит от арх-ры целевой выч системы

Оптим-я может вып-ся для след типовых синтакс-х конструкций:1)линейние участки программ; 2)логические выражения 3)циклов 4)вызовов процедуры функций