Смекни!
smekni.com

Построение отдельных фаз компиляции (стр. 4 из 4)

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

G ({ prog, end., begin, end, while, do, if, then, else, and, or, not, =, <, >, (, ), -, +, ++, a, c, ;, :=}, {B, E}, P, E)

P:

Eprog E end.

EE | E;E | E;

E if (B) then E else E| if E then E| begin E end | while (B) do E | a:=E | a++

BB or B | B

BB and B | B

BE<E | E>E | E=E | (B) | not(B)

EEE | E+E | E

E → (E) | a | c

3.3. Результат работы синтаксического анализатора

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

Экранная форма работы синтаксического анализатора представлена на рис. 3.1.

Рис. 3.1. Экранная форма работы синтаксического анализатора

По последовательности сработавших правил «свертки» строится цепочка вывода и дерево вывода.

Синтаксическая ошибка возникает, если между двумя обозреваемыми символами нет ни одного отношения предшествования, либо не удалось выполнить операцию «свертка», т.е. не найдено правило, совпадающее с основой.

Экранная форма при обнаружении синтаксической ошибки представлена на рис. 3.2.

Рис. 3.2. Экранная форма при обнаружении синтаксической ошибки

В случае обнаружения синтаксической ошибки программа выдает сообщение об ошибке с указанием ее места в исходном тексте, работа синтаксического анализатора останавливается.


Заключение

В результате выполнения курсовой работы для заданного входного языка были построены отдельные фазы компиляции.

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

Было установлено, что заданных методов более эффективным является метод цепочек, так как для него время поиска идентификатора в таблице идентификаторов гораздо меньше, чем для метода бинарного дерева, а именно операция «поиск» является основным критерием сравнения эффективности методов.

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

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

Отдельные фазы компиляции, разработанные в данной курсовой работе, дают представление о технике и методах, лежащих в основе построения компиляторов.

Список литературы

1. Гордеев А.В. Молчанов Л.Ю. Системное программное обеспечение. – СПб.: Питер, 2005. – 734с.: ил.

2. Кампапиец Р. II. Манькоп Е. В., Филатов Н. Е. Системное программирование. Основы построения трансляторов: Учебное пособие для высших и средних учебных заведений. – СПб.: КОРОНА Принт, 2004. – 256с.: ил.

3. Молчанов Л.Ю. Системное программное обеспечение. Лабораторный практикум. – СПб.: Питер, 2005. – 284с.: ил.