Автор работы: Пользователь скрыл имя, 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
Министерство общего и профессионального образования
Российской Федерации
Государственное образовательное учреждение
высшего профессионального образования
КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ
УНИВЕРСИТЕТ
Кафедра Вычислительной техники и АСУ р
(наименование кафедры)
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проэкту
по дисциплине Теория языков программирования и методов трансляции в ительные систдел процессов
на тему: Транслятор языка высокого уровня
Выполнил студент группы 06-ЗКс-ПО1
Перегняк Михаил Александрович_________________
Допущен к защите________________________
Руководитель работы _____Ключко В. И.____________________________
Защищен __________________________ Оценка ______________________
Краснодар
2008
Государственное образовательное учреждение
высшего профессионального образования
КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ
УНИВЕРСИТЕТ
Кафедра Вычислительной техники и АСУ
(наименование кафедры)
Зав. кафедрой ВТ и АСУ м
З А Д А Н И Е
на курсовой проэкт
Студенту: Перегняку М.А. группы 06-ЗКс-ПО1 2-го курса
(Ф.И.О.) (№ группы и курса)
факультета КТАС
специальности 230105 Программное обеспечение ВТ и АСУ
(шифр и наименование)
Тема работы: Транслятор языка высокого уровня
Содержание задания: разработать программу, которая представляет собой синтаксический анализатор транслятора
Объем работы:
а) пояснительная записка к работе 26 с.
б) задачи
и
Срок выполнения работы: с "___" ______по"___"____20__г.
Срок защиты:
Дата выдачи задания: "___"____20__г.
Дата сдачи работы на кафедру: "___"____20__г.
Руководитель работы д.т.н., проф. В. И. Ключко
КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ
УНИВЕРСИТЕТ
РЕФЕРАТ
Пояснительная записка курсовому проэкту 26 с., 12 рис.
СИНТАКСИЧЕСКИЙ АНАЛИЗАТОР ТРАНСЛЯТОРА
Объектом исследования является синтаксический анализатор транслятора
Цель работы заключается в том, чтобы написать программу, которая представляет собой синтаксический анализатор транслятора.
К полученным результатам относятся пояснительная записка и программа, написанная на языке программирования «Delphi».
Содержание
Введение…………………………………………………………
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
Заключение……………………………………………………
В последнее время круг задач, решаемых с помощью ЭВМ, значительно расширился, а сложность задач возросла. В этой ситуации все чаще используются языки высокого уровня, а также специализированные языки. Кроме того, всем известен тот факт, что ЭВМ понимает программы, состоящие только из внутренних команд процессора. В связи с этим возникает задача перевода программы с языка высокого уровня на язык, понятный процессору ЭВМ (трансляция). В этом процессе одним из наиболее важных этапов является синтаксический анализ программы, написанной на языке программирования высокого уровня с использованием формальных грамматик. Разрабатывается один из вариантов программы, выполняющей такую процедуру — синтаксический анализатор транслятора.
Транслятор - это программа, которая допускает в качестве входа программу на исходном языке высокого уровня, а в качестве выхода выдает другую версию этой программы, написанную на другом языке, который называется объектным языком.
Объектный язык обычно является машинным языком некоторой вычислительной машины, причем программу в этом случае можно сразу же выполнять.
Транслятор можно представить как сложный вычислительный процесс, включающий отдельные более простые процедуры обработки. На рисунке 1 представлена упрощенная схема транслятора, который содержит:
- лексический блок;
- синтаксический блок;
- генератор кода;
- таблицы.
Рисунок 1
1.1 Лексический блок
Входом транслятора служит набор двоичных символов (цепочка).
Лексический блок предназначен для того, чтобы разбивать цепочку символов на слова, из которых она состоит.
Например, цепочка символов может быть такой:
ifb1=10thengoto5.
Лексический блок устанавливает, что цепочка представляет слово if, за которым следует переменная b1, знак равенства, число 10, слова then, goto и метка 5. Таким образом 16 символов преобразуются в 7 новых единиц.
Эти единицы называются лексемами. Каждая лексема состоит из двух частей: класса и значения. Первая часть означает, что лексема принадлежит одному из конечного множества классов и указывает характер информации, включенной в значение лексемы.
Так b1 принадлежит классу "переменная" и имеет значение, которое служит указателем на элемент таблицы имен для b1. Этот указатель на таблицу имен фактически является внутренним именем переменной b1.
Лексема 10 принадлежит классу "константа" и имеет в качестве значения набор битов, изображающих число 10.
Знак равенства относится к классу "знак отношения", а его значение - указывает - какое именно отношение.
Лексема if принадлежит классу "if" (служебное слово) и информирования о ее значении не требуется.
Если рассматривать таблицу имен как словарь, то лексическая обработка аналогична группировке букв в слова и нахождению этих слов в словаре.
1.2 Синтаксический блок
Этот блок осуществляет синтаксический анализ написанной программы на наличие или отсутствие ошибок и переводит последовательность лексем, построенную лексическим блоком, в другую последовательность, которая более непосредственно отражает порядок, в котором должны выполняться операции в программе.
Например, если в программе написано a+b*c - это значит, что числа, представляемые идентификаторами b, c будут перемножены и к результату будет прибавлено число, представляемое идентификатором а.
Указанные выражения можно перевести так:
УМНОЖИТЬ (b, c, r1),
СЛОЖИТЬ (a, r1, r2),
где первое выражение идентифицируется как "умножить b на с и заслать результат в r1", а второе - "сложить а и r1 и заслать результат в r2".
Таким образом, пять лексем, выданных лексическим блоком, преобразуются в две новые единицы, которые описывают такие же действия. Эти новые единицы называются атомами и образуют выход синтаксического блока.
1.3 Генератор кода
Этот блок "развертывает" атомы, построенные СБ, в последовательность команд вычислительной машины, которые выполняют соответствующие действия.
Точный характер этого развертывания зависит от многих признаков. Например, от типа операторов (b, c) - с фиксированной или плавающей точкой, от используемых регистров машины и др.
Будет рассмотрена одна и самая важная процедура транслятора:
- синтаксический анализ программы на наличие или отсутствие в ней ошибок.
За основу языка высокого уровня транслятора был взят язык программирования Pascal. Он был упрощен, а часть правил изменена или отсутствует.
Отличия заданного языка от Pascal:
1) Необходимы разделы PROGRAM и VAR.
2) Определен только 1 тип:Real,Integer .
3) Идентификатор представляется одной буквой.
4) Между любыми лексемами обязательно необходим пробел.
5) Из операторов описаны: оператор присваивания ‘=’; aрифметические операции; составной оператор BEGIN-END, циклический оператор REPEAT-UNTIL.