Разработка транслятора

Автор работы: Пользователь скрыл имя, 22 Августа 2014 в 11:19, курсовая работа

Краткое описание

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

Содержание

ВВЕДЕНИЕ
4
1
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
5
2
ФОРМАЛЬНОЕ ОПИСАНИЕ ЯЗЫКА ПРОГРАММИРОВАНИЯ
7
3
РАЗРАБОТКА АЛГОРИТМОВ СКАНЕРА, СИНТАКСИЧЕСКОГО АНАЛИЗАТОРА И ГЕНЕРАТОРА ПРОМЕЖУТОЧНОЙ ФОРМЫ ПРЕДСТАВЛЕНИЯ ПРОГРАММЫ
14
4
РАЗРАБОТКА ПРОГРАММНОГО КОМПЛЕКСА ПРОЕКТА
21
5
РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ И ОТЛАДКИ ПС
24

ЗАКЛЮЧЕНИЕ
27

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
28

Прикрепленные файлы: 1 файл

курсовая по сис. прог. Межитханов.docx

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

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

3.2 Алгоритмизация синтаксического анализатора

 

 

Синтаксический анализатор предназначен для проверки исходного кода на наличие в нем синтаксических ошибок.

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

На первом шаге работы программы из цепочки лексем формируется строка, соответствующая одному из операторов языка.

На втором шаге программа просматривает строку и вызывает для нее процедуру проверки на ошибки.

На третьем шаге программа выбирает правило для проверки.

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

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

Алгоритм работы синтаксического анализатора приведен на рис. 3.2.

В Таблице 3.2 приведены основные константы и переменные, использованные при реализации данного алгоритма.

Таблица 3.2

Идентификатор

Назначение

 

Тип

i,j,k

параметры циклов

integer

St

Текущая лексема

Строковый

C

Позиция текущей лексемы в таблице

Целый

P

Количество просмотренных лексем в конструкциях, кроме условия и цикла

Целый

Cod

Код текущей лексемы

Целый

D

Количество просмотренных лексем в конструкции цикла

Целый

Cond

Количество просмотренных лексем в конструкции условно оператора

Целый

F

Возвращает TRUE, если найдена ошибка

Логический


 

 

 

 

 

 

 


3.3 Алгоритмизация генератора промежуточной формы

 

 

представления программы

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

Каждая четверка записывается в виде операция, ор1, ор2, результат, где операция – это выполняемая объектным кодом функция,

Ор1 и ор2 – операнды этой операции, а

Результат – определяет, куда должно быть помещено результирующее значение.

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

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

В Таблице 3.3 приведены основные константы и переменные, использованные при реализации данного алгоритма.

Таблица 3.3                    

Идентификатор

Назначение

 

Тип

i,j,k

параметры циклов

integer

St

Текущая лексема

Строковый

Kol_s

Количество знаков в математическом выражении

Целый

Operands

Операнды математического выражения

Строковый

Stack

Знаки математических операций в выражении

Строковый

Ch

Идентификатор, объявленный в  цикле как счетчик

Строковый

Expr

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

логический

Ind4

Индекс текущей строки в таблице четверок

Целый

ind_jgt

Позиция четверки JGT в таблице четверок

Целый

Letters

Буквы английского алфавита

Константа, set of char=['A'..'Z','a'..'z']


 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4 РАЗРАБОТКА ПРОГРАММНОГО КОМПЛЕКСА ПРОЕКТА

 

4.1 Программная реализация сканера

 

Программа реализована на языке Delphi (Object Pascal) в соответствии с алгоритмом. Работа программы основана на разделении ее на подпрограммы, соответствующие выполняемым функциям.

Входными данными является текст исходной программы.

Выходными данными является таблица лексем, с соответствующими типами и кодами. Разработанные подпрограммы  приведены в таблице 4.1.

Таблица 4.1 - Подпрограммы

Заголовок подпрограммы

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

Procedure D_C

Процедура удаления комментарий

Procedure D

Процедура разбиения текста программы на лексемы

function z (a,b : char) : boolean

Функция проверки лексемы на принадлежность к классу «Двуместный разделитель». a – первый символ лексемы, b – второй символ лексемы.

function q (a,b : char) : boolean

Функция проверки лексемы на принадлежность к классу «Одноместный разделитель». a – первый символ лексемы, b – второй символ лексемы.

function r (a : string) : boolean

Функция проверки лексемы на принадлежность к классу «Зарезервированное слово». a – лексема.

function vint (a : string) : boolean

Функция проверки лексемы на принадлежность к классу «Целое число». a – лексема.

function vofloat (a : string) : boolean

Функция проверки лексемы на принадлежность к классу «Дробное число». a – лексема.

function vofloat1 (a : string) : boolean

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

function i (a : string) : boolean

Функция проверки лексемы на принадлежность к классу «Идентификатор». a – лексема.

function s (a : string) : boolean;

Функция проверки лексемы на принадлежность к классу «Строка символов». a – лексема.

procedure TMainForm.Scanir(Sender: TObject)

Процедура сканирования исходного текста программы

procedure TMainForm.FormActiv (Sender: TObject)

Процедура заполнения заголовка таблицы при активации формы


Текст программы приведен в приложении 1.

 

 

 

4.2 Программная реализация синтаксического анализатора

 

 

Программа реализована на языке Delphi (Object Pascal) в соответствии с алгоритмом. Работа программы основана на разделении ее на подпрограммы, соответствующие выполняемым функциям.

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

Выходными данными являются сообщения об обнаруженных ошибках.

Разработанные подпрограммы  приведены в таблице 4.2.

Таблица 4.2 - Подпрограммы

Заголовок подпрограммы

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

function Find: boolean;

Функция обнаружения ошибок в лексемах

function k (a : string; k : integer) : boolean;

Функция проверки выражения. a – выражение, k - номер строки в таблице, в которой находится первая лексема, принадлежащая выражению.

function e (a : string) : boolean;

Функция проверки элемента массива.

a – элемент массива.

function list(a : string) : boolean;

Функция проверки списка идентификаторов.

a – список идентификаторов.

function CLS (a : string; k : integer) : boolean;

Функция проверки зарезервированного слова, обозначающего очистку экрана. a – слово «CLS», k - номер строки в таблице, в которой находится данная лексема.

function ent (a : string; k : integer) : boolean;

Функция проверки операции ввода. a – зарезервированное слово INPUT, k - номер строки в таблице, в которой находится данная лексема.

function out (a : string; k : integer) : boolean;

Функция проверки операции вывода. a – зарезервированное слово PRINT, k - номер строки в таблице, в которой находится данная лексема.

function dim (a : string; k: integer) : boolean;

Функция проверки раздела описания переменных. a – зарезервированное слово DIM, k - номер строки в таблице, в которой находится данная лексема.

function pk (k : integer) : boolean;

Функция проверки операции присваивания. k - номер строки в таблице, в которой находится идентификатор, которому производится присваивание.

function TMainForm.is_con

(a : string; k : integer) : boolean;

Функция проверки условного оператора. a – зарезервированное слово IF, k - номер строки в таблице, в которой находится данная лексема.

function TMainForm. cycle

(a : string; k : integer) : boolean;

Функция проверки цикла. a – зарезервированное слово FOR, k - номер строки в таблице, в которой находится данная лексема.


Текст программы приведен в приложении 1.

 

 

 

4.3 Программная реализация генератора промежуточной формы представления программы

 

 

Программа реализована на языке Delphi (Object Pascal) в соответствии с алгоритмом. Работа программы основана на разделении ее на подпрограммы, соответствующие выполняемым функциям.

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

Выходными данными является промежуточная форма представления программы в виде  четверок.

Разработанные подпрограммы  приведены в таблице 4.3.

Таблица 4.3 - Подпрограммы

Заголовок подпрограммы

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

function Ga (a : char) : byte;

Функция определения приоритета математической операции, a – знак операции

procedure fourexp (a : string);

Процедура перевода математического выражения в четверки, a - выражение

procedure fourpr (a : string);

Процедура перевода конструкции вывода данных в запись в виде четверок, a – конструкция вывода данных

procedure fourinp (a : string);

Процедура перевода конструкции ввода данных в запись в виде четверок, a – конструкция ввода данных

procedure fouras (a : string);

Процедура перевода конструкции присваивания в запись в виде четверок, a – конструкция присваивания

procedure TMainForm.fourc (a : string);

Процедура перевода условного оператора в запись в виде четверок, a – конструкция условного оператора

procedure TMainForm.fourcy (a : string);

Процедура перевода цикла в запись в виде четверок,

a – конструкция цикла


Текст программы приведен в приложении 1

 

 


 

 

 

 

 

 

 

 

 

 

 

5 ТЕСТИРОВАНИЕ И ОТЛАДКА

 

 

В таблице 5.1 приведены результаты тестирования и отладки сканера.

Таблица 5.1 - Результаты тестирования и отладки сканера

Тестовые

данные

Ожидаемый

результат

Полученный

результат

Тип ошибки

Исправление

1

#include <stdio.h>

int main()

{

int a = 10;

int b = 10;

if( a == b )

{

printf("a is equalent b\n");

}

return 0;

}

Z34

I40

I40

P22

C20

P14

C20

I40

P22

I40

P14

I40

Z34

I40

I40

P22

0

I40

P22

I40

P14

I40

Не распознается математическое выражение, содержащее только цифры

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

2

int main ()

{

int x

cin>>x;

if (x%2) cout <<("x-четное");

else cout << ("х-не четное");

return 0;

}

I40

0

C20

P11

I40

P14

C20

P12

I40

I40

P10

P22

C20

P11

I40

P14

C20

P12

I40

Не выявлено

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

3

int main ()

{

int b;

float i;

cout >> "введите b";

cin>> b;

i = Math.sqrt (b);

cout >> i;

return 0;

}

Z38

P17

I40

P14

C20

P18

P21

I40

Z39

Z33

I40

Z38

P17

I40

P14

C20

P18

P21

I40

Z39

Z33

I40

Не выявлено

 

4

#include <stdio.h>

int Foot()

printf("begin function foot\n");

int r = 5;

return r;

printf("end function foot\n");

}

int main()

{

int v = 0;

v = Foot();

printf("Foot is return %d.\n", v );

return 0;

}

Z35

I40

P22

C20

Z36

C20

Z33

I40

Z37

I40

Z35

I40

P22

C20

Z36

C20

Z33

I40

Z37

I40

Не выявлено

 

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