- •Содержание
- •1. Организация таблицы идентификаторов
- •1.1. Исходные данные
- •1.2. Назначение таблиц идентификаторов
- •1.3. Метод простого рехеширования
- •1.4. Простой список
- •1.5. Результаты
- •2. Проектирование лексического анализатора
- •2.1. Исходные данные
- •3. Проектирование синтаксического анализатора
- •3.1. Исходные данные
- •3.2. Построение синтаксического анализатора
- •3.3. Результаты
- •Список использованной литературы
3.3. Результаты
Программа проводит синтаксический анализ последовательного набора лексем, поступающего от лексического анализатора, на основе правил остовной грамматики. Результатом ее работы является дерево синтаксического разбора. В случае синтаксической ошибки на экране появляется сообщение.
На вход подается следующий текстовый файл:
prog
while ( df > 0 ) do begin {
ddd }
if ( vxb > 0 ) and ( a = b ) then begin
c := nb / 0110 + 101 ;
d := 10110 ;
end
else c := 1011 endif
end
end.prog
if (p=0110b) then begin y := h; end
endif; {komment }
for k:=0011b to u do k:=k+00101b;
end.
Результат работы синтаксического анализатора представлены на рис. 9.
Рис. 9. Результат построения дерева разбора
На вход подается следующий текстовый файл:
prog
while ( df > 0 ) do begin
if ( vxb > 0 ) and ( a = b ) then begin
c := nb / 0110 + 101 ;
d := 10110 ; )
end
else c := 1011 endif
end
end.prog
if (p=0110b) then begin y := h; end
endif; {komment }
for k:=0011b to u do k:=k+00101b;
begin
end.
Результат работы синтаксического анализатора при подаче на вход анализатора ошибочных конструкций представлен на рис. 10.
Рис. 10. Результат построения дерева разбора при подаче на вход анализатора ошибочных конструкций
Заключение
В результате выполнения курсовой работы создан простейший компилятор для заданного входного языка.
Лексический анализатор, входящий в состав компилятора, игнорирует в тексте входной программы пробелы, знаки табуляции и переводы строки, а также комментарии, выделенные фигурными скобками. В случае обнаружения неверной лексемы (например числа, содержащего букву), незакрытого комментария или незавершенной лексемы (такой лексемой может быть только символ «:») лексический анализатор выдает сообщение об ошибке и прекращает дальнейший анализ. При наличии нескольких неверных лексем анализатор обнаруживает только первую из них. Результатом выполнения лексического анализатора является структура данных, которая представляет собой таблицу лексем.
Синтаксический анализатор, входящий в состав компилятора, построен на основе грамматики операторного предшествования. Синтаксический анализатор позволяет проверять соответствие структуры исходного текста заданной грамматике входного языка. При наличии одной ошибки пользователю выдается сообщение с указанием местоположения ошибки в исходном тексте. Анализ типа обнаруженной ошибки не производится. При наличии нескольких ошибок в исходном тексте обнаруживается только первая из них, после чего дальнейший анализ не выполняется. Результатом работы синтаксического анализатора является структура данных, которая представляет собой синтаксическое дерево. В процессе выполнения курсовой работы было разработано приложение, реализующее отдельные фазы компиляции заданного языка.
Список использованной литературы
1. Системное программное обеспечение: Учебник для вузов/ А.Ю. Молчанов- СПб.: Питер, 2003.- 396 с.
2. Системное программное обеспечение. Лабораторный практикум/ А.Ю. Молчанов- СПб.: Питер, 2005.- 284 с.