Автор работы: Пользователь скрыл имя, 11 Марта 2012 в 19:46, курсовая работа
Объектом исследования является синтаксический анализатор транслятора
Цель работы заключается в том, чтобы написать программу, которая представляет собой синтаксический анализатор транслятора.
К полученным результатам относятся пояснительная записка и программа, написанная на языке программирования «Delphi».
Введение………………………………………………………………...5
1 Общие сведения о трансляторах…………………………………….6
1.1 Лексический блок……………………………………………..7
1.2 Синтаксический блок………………………………………….8
1.3 Генератор кода…………………………………………………8
2 Описание транслируемого языка…………………………………….9
3 Синтаксический анализатор транслятора…………………………...10
3.1 Формальная грамматика……………………………………....10
3.2 Нахождение множества «Выбор»…………………………….12
4 Описание программы…………………………………………………23
4.1 Общие сведения………………………………………………..23
4.2 Работа с программой…………………………………………..23
Заключение……………………………………………………………...26
6) Операторы отделяются друг от друга знаком конца строки.
Для построения управляющей таблицы МПА необходимо нахождение множества ВЫБОР. Исходной для множества выбора является следующая грамматика:
[P]~[Z][D][B]
[Z]~program[I]
[D]~var[I][L-V]:[TP]
[L-V]~,[L-V]
[L-V]~$
[TP]~real
[I]~i
[B]~begin[L-S]end
[L-S]~repeat[L-S]until[SRAV][
[L-S]~[S][L-S]
[L-S]~write(i)[L-S]
[L-S]~read(i)[L-S]
[L-S]~$
[S]~[I]=[G]
[G]~[T][E-C]
[E-C]~+[T][E-C]
[E-C]~$
[T]~[F][T-C]
[T-C]~*[F][T-C]
[T-C]~$
[F]~([G])
[F]~i
[SRAV]~[FT][ZNAK][FT]
[ZNAK]~>
[ZNAK]~<
[ZNAK]~=
[FT]~[I]
ШАГ 1 процедуры определяет аннулирующие нетерминалы и правила.
5. [L-V] → $
13. [L-S] → $
17.[E-C] → $
20.[T-C] → $
ШАГ 2 процедуры состоит в нахождении отношения, называемого НАЧИНАЕТСЯ ПРЯМО С (НПС).
Эти отношения определяются на множестве символов грамматики и означают, что если, применив к нетерминалу <A> точно одно правило и, возможно, заменив в нем некоторые аннулирующие нетерминалы на $, можно получить цепочку, начинающуюся, например с <B>. В этом случае пишут <A>НПС<B>.
На рисунке 2 показан фрагмент полученных отношений.
ШАГ 3 процедуры - это вычисление отношения НАЧИНАЕТСЯ С (НС).
В общем случае матрица отношений НС определяется рефлексивно-транзитивным замыканием матрицы НПС. Признак рефлексивности определяется тем, что любой символ всегда начинается с самого себя (1 на главной диагонали). Транзитивные отношения характеризуются всеми возможными подстановками при осуществлении вывода.
Формальный алгоритм транзитивного замыкания включает в себя следующие шаги:
1) для каждого единичного элемента aij исходной матрицы в строку i дописать единичные элементы из строки j;
п.1 повторять сверху вниз и слева направо для всех элементов матрицы.
На рисунке 3 показан фрагмент полученного отношения.
Рисунок 2
ШАГ 4 вычисляет множество ПЕРВЫЙ.
Для каждой строки матрицы отношения НС отмеченные столбцы, соответствующие терминальным символам, указывают терминалы, составляющие множество ПЕРВЫЙ для символа, которым помечена данная строка . Так, в нашем примере:
ПЕРВЫЙ ([P])={ program}
ПЕРВЫЙ ([Z])={ program }
ПЕРВЫЙ ([D])={ var } и.т.д.
ШАГ 5 - вычисление множества ПЕРВЫЙ для правой части каждого правила. Имея информацию, полученную на шаге 4, эти вычисления проделать очень просто.
ПЕРВЫЙ (1)={ program}
ПЕРВЫЙ (2)={ program }
ПЕРВЫЙ (3)={ var } и.т.д.
Рисунок 3
ШАГ 6 - это построение отношения, нызываемого ПРЯМО - ПЕРЕД (ПП):
Эти отношения определяются следующим образом: мы пишем А ПП В тогда и только тогда, когда существуют правила вида: <D> → <A> <B> ,
<D> → <A> β <B> , где <А>, <В> - НТ символы, β - аннулирующая цепочка.
На рисунке 4 показан фрагмент полученного отношения.
ШАГ 7 - это построение отношения ПРЯМО-НА-КОНЦЕ (ПНК).
Отношение определяется следующим образом: если <А> и <В> символы грамматики, то <А> ПНК <В> тогда и только тогда, когда есть правила вида <B> →α <A>, <B> →α <A> β, где β - аннулирующая цепочка, α - произвольная цепочка. Это отношение является инверсией отношения НПС, если правую часть правила рассматривать "справа - налево".
На рисунке 5 показан фрагмент полученного отношения.
Рисунок 4
Рисунок 5
ШАГ 8 - построение отношения НА-КОНЦЕ (НК).
Отношение НК - это рефлексивно-транзитивное замыкание отношения ПНК.
На рисунке 6 показан фрагмент полученных отношений.
Рисунок 6
ШАГ 9 - это вычисление отношения, называемого ПЕРЕД (П):
Мы пишем <А> П <В> тогда и только тогда, когда из начального символа можно вывести цепочку, в которой за вхождением <А> сразу же следует вхождение <В>. Можно записать без вывода, что отношение П является произведением отношений НК, ПП и НС. Это отношение также соответствует тем символам, которые находятся НА КОНЦЕ начального нетерминала для всех выводимых из него цепочек.
ШАГ 10 заключается в расширении отношение ПЕРЕД (П+) за счет включения в него концевого маркера (последний столбец)
Это отношение соответствует тем терминальным символам, которые находятся НА КОНЦЕ начального нетерминала для всех выводимых из него цепочек (первый столбец матрицы НК).
На рисунке 7 показан фрагмент полученных отношений для шагов 9 и 10.
Рисунок 7
ШАГ 11 - это вычисление множества СЛЕД для каждого аннулирующего нетерминала. Множество СЛЕД будет содержать все терминальные символы, для которых аннулирующие нетерминалы расположены ПЕРЕД.
ШАГ 12 - вычисление множеств ВЫБОР, которые можно получить из уже вычисленных значений множеств ПЕРВЫЙ и СЛЕД.
На рисунке 8 показан фрагмент множества ВЫБОР, из которого видно, что множества выбора правил, имеющих одинаковые левые части, не пересекаются. Грамматика, порождающая рассматриваемый язык, является LL(1)-грамматикой и для неё можно построить МП-распознаватель.
Управляющая таблица МПА представлена на рисунке 9, а правила его работы на рисунке 10.
Работа синтаксического блока:
1. Начальное состояние магазина - нетерминал <P>.
2. Автомат считывает очередную лексему и верхний символ из магазина.
3. Автомат обращается к управляющей таблице по двум значениям и получает управляющее правило — выход таблицы.
4. Автомат действует согласно управляющему правилу.
Рисунок 8
Рисунок 9
Рисунок 10
Весь программный продукт хранится в виде файлa “Progect.exe”. К нему прилагаются файлы с программами (*.txt), грамматиками (*.gra).
В программу встроен редактор для написания и редактирования программ и грамматик. Для обеспечения нормального функционирования программы необходима операционная система Windows 95 и выше.
Программа создана с учетом современных требований к интерфейсу и интерактивным программным продуктам.
Программа обработчика грамматик представляет собой окно (рисунок 11), в котором имеется поле редактирования грамматики, а также кнопки меню, с помощью которых можно сохранять/создавать/загружать грамматики, сохранять базу анализатора, запускать обработчик, просматривать таблицы и множества.
Порядок работы программы.
После открытия или написания грамматики необходимо нажать кнопку меню «Запуск» (F9). Далее необходимо сохранить базу анализатора в файл для последующей работы анализатора, а также можно просмотреть в меню «Таблицы» полученные множества и таблицы отношений.
Рисунок 11
Программа синтаксического анализатора также представляет собой окно с кнопками меню, полем редактирования текста программы и полем порядка выполнения обработки (рисунок 12).
С помощью меню «файл» можно открывать/создавать/сохранять файлы программ, а также открывать базу анализатора и выходить из программы.
С помощью меню «Обработка» можно проверить программу на ошибки либо запустить пошаговую проверку. С помощью меню «Стек» можно просмотреть содержимое стека в текущий шаг выполнения.
Рисунок 12
После открытия файла базы анализатора и написания текста программы можно нажать кнопку «Стек» для просмотра стека, после чего необходимо в меню «Обработка» выбрать либо пошаговое выполнение (F8), либо запуск (F9). В поле порядка выполнения программы можно будет увидеть сообщение об успешной или ошибочной обработке (рисунок 12).
Разработанная программа реализует лексический и синтаксический анализаторы транслятора в соответствии с выданным заданием. Ее достоинствами являются: удобный интерфейс и наглядность работы. Программа используется при изучении формальных грамматик и трансляторов в учебном процессе.