Разработка компилятора с языка Рапира

Автор работы: Пользователь скрыл имя, 25 Декабря 2013 в 12:58, курсовая работа

Описание

Уже в ЭВМ первого поколения появляется язык мнемокода (впоследствии – язык ассемблера) для более понятного человеку представления машинных команд. Программистам уже не нужно тратить уйму времени над загадочной последовательностью нулей и единиц. Затем возникают и занимают прочное место в решение задач другие, более сложные языки программирования, и дальнейшее развитие систем программирования идет именно в повешении дружественности к человеку.

Содержание

Введение
Анализ технического задания
Описание языка
Выбор и обоснование архитектуры системы
Выбор и обоснование алгоритма
Описание программы
Методика испытаний
Заключение
Список использованной литературы

Работа состоит из  1 файл

Весь курсовой.docx

— 455.49 Кб (Скачать документ)

4)  Создание таблицы стандартных  символов

В таблицу стандартных символов записывается пары <таблица  –индекс  лексемы> в той последовательности, в которой элемент встречается  в тексте программы(Рисунок 1).

Рисунок 1 - пример кода программы создания таблицы стандартных символов

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

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

1.  Формируем польскую запись:

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

2.  Переводим польскую запись  в матричную форму: 

Читаем обратную польскую запись слева  направо. При чтении операнда  –  он записывается в стек ; при чтении операции  –извлекаем из стека  два  верхних операнда, формируем тройку (операция, операнды), записываем её в  матрицу; в стек E записываем элемент  матрицы, в котором будет результат  выполнения операции.

Согласно методу Дейкстры строится таблица приоритетов арифметических операций для выражений.

 

Таблица 3 –Таблица приоритетов.

(

0

)

1

+-

2

*/

3


Поясним описанный алгоритм разбора  сложного арифметического выражения  на примере. Разберем строку следующего вида:  d+(a+b)*c.

Таблица 4 –Таблица перевода арифметического выражения в ОПН:

Стек оп-ий 

Вход

Выход

E

D

D

+

+

D

+(

(

D

+(

A

DA

+(+

+

DA

+(+

B

DAB

+

)

DAB+

+*

*

DAB+

+*

C

DAB+C

E

$

DAB+C*+


Таблица 5 –Таблица ОПН в матричную форму:

Стек оп-ов 

Вход

Выход

D

D

 

DA

A

 

DAB

B

 

DM1

+

M1:AB+

DM1C

C

 

DM2

*

M2:M1C*

M3

+

M3:DM2+


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

 

5. Описание программы.

 

5.1 Общее описание

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

Установка программы - данное приложение не требует дополнительной установки. В комплект поставки включается исполняемый файл  Project4_XE3.exe.

Минимальные требования:

- Операционная система: Windows XP/Vista/Windows7;

- Процессор: Pentium 3 и выше;

- Оперативная память: 1,5 Мb;

- Видеокарта: VGA;

- Жесткий диск: 1,5 Мb свободного места;

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

 

 

 

 

 

 

 

6. Методика испытаний

Правильный текст программы:

имена k,i,j;

для i от 1 до 10::

для j от 1 до 5::

k=k+i*j;

все;

все;

кнц.

При компиляции получим сообщение, что ошибок нет(рисунок 1).

Рисунок 1-При компиляции нет ошибок

 

 

Текст программы:

имена k,i,j;

для i от 1 до 10::

для j от 1 до 5::

k=k+i*j;

все;

все

кнц.

При компиляции этого кода была найдена  ошибка и вывелось соответствующее  сообщение, что «; после цикла  не найдена» (Рисунок 2). Это обусловлено несходимостью с грамматикой цикла, описанной правилом  <цикл>::=от <оп> до <оп>::<спис_опер>все;

Рисунок 2- Ошибка в цикле

 

 

-проверка на описание переменных

Текст программы:

имена k,i,j;

для iyt от 1 до 10::

для j от 1 до 5::

k=k+i*j;

все;

все;

кнц.

Используемые переменные должны быть описаны, если она будет не описана, появится сообщение с ошибкой( Рисунок  3)

Рисунок 3 – переменная не описана

 

 

 

 

Заключение

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

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

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

В ходе выполнения курсового проектирования  были получены  навыки оформления программной  документации в соответствии с Единой Системой Программной Документации и повышен уровень практических навыков программирования в интегрированной  среде программирования  Borland  Delphi 2007. Также были углублены теоретические  знания по дисциплине  «Теория языков программирования и методы трансляции»  и развиты навыки самостоятельной  деятельности в области создания программных продуктов.

 

 

 

 

 

 

 

 

 

 

Список используемой литературы

1.  Фаронов В.В. Delphi. Программирование  на языке высокого

уровня: Учебник для вузов –Спб.: Питер, 2006. –640с.: ил.

2.  Архангельский А.Я. Программирование  в Delphi 7.  –М.: ООО «Би-ном-Пресс»,2003 г. –1152с.: ил.

3.  Разработка компиляторов: метод.  Указ. По курсовому проектированию. –Муром: ИПЦ МИВлГУ, 2007 –52с.

4.  Гордеев А.В., Молчанов А.Ю.  Системное программное обеспече-ние.  СПб: Питер, 2001г. -736с.

5.  Грис Д. Конструирование  компиляторов для ЦВМ. М.: Мир,

1975. -544, 1 экз.

6.  Петюшкин А.В.  HTML. Экспресс  курс.  –Спб.: БХВ-Петербург,

2003. –256с.

7.  Ахо А., Ульман Дж. Теория  синтаксического анализа, перевода  и

компиляции. –М.: Мир, 1978. Т.1, 612с. –Т.2, 487с.

 

 

 

 

 

 

 

 

 

 


Информация о работе Разработка компилятора с языка Рапира