Рефераты

Интерпретация блок-схем

int true_x; // координаты блока на планшете для перехода

int true_y; // по ИСТИНЕ (TRUE)

int false_x; // координаты блока на планшете для перехода

int false_y; // по ЛЖИ (FALSE)

};

и строка, содержащая текст данного блока.

Эти записи строятся следующим образом. В поле type содержится тип,

сохраняемого блока. В полях x,y – координаты блока на планшете. В полях

true_x, true_y – координаты блока на планшете для перехода по истине. И

соответственно, в полях false_x, false_y - координаты блока на планшете

для перехода по условию ложь. В последнем поле содержится текст

соответствующий данному блоку или текстовая константа NULL, если текста

нет.

Последовательность записей создается сканированием списка структур

блоков и переводом во внутреннее представление блок – схемы. Запись

заканчивается, когда список структур будет полностью просканирован.

Кроме этого в Windows версии системы в файл блок схемы добавляются

ключевые слова для того, чтобы при считывании блок-схем не было допущено

ошибок и при обнаружении их можно было сообщить об этом пользователю.

4.4.2. Знакомство с системой

4.4.2.1. MS-Dos версия системы

Итак, Вы решили поработать с системой, предлагаемой в данной работе. Вы

должны находиться в операционной системе MS-DOS 3.0 или Windows 3.1 и выше.

Выбрав в диспетчере файлов имя программы MAIN_CURS.EXE, запустите ее. На

мониторе компьютера появится главное окно программы, в котором будут

указаны автор работы и его научный руководитель. После этого нужно нажать

клавишу , либо подвести указатель манипулятора мышь на кнопку и

нажать левую кнопку манипулятора.

[pic]

Пункты главного меню имеют следующее назначение:

Файл для того, чтобы создать блок-схему алгоритма, считать её с диска,

записать на диск или выйти из системы.

Редактор подменю этого пункта предназначено для создания и

редактирования блок-схем. Оно предоставляет набор блоков и стрелок для

построения блок-схем, а также предоставляет возможности удалять блоки и

производить разметку экрана координатной сеткой.

Текст этот пункт предназначен для набора и редактирования текста внутри

блока.

[pic]

Интерпретация пункты этого меню позволяют запускать пошаговый отладчик,

организуют просмотр таблицы переменных, а также запускают интерпретатор.

Справка здесь можно будет получать информацию о системе или о языке

блок –схем.

Если Вы выберете пункт “новый файл”, то получите окно графического

редактора блок-схем, который будет разбит координатной сеткой, а на поле

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

положение блока.

После выбора пунктов “Блоки” или “Стрелки” справа от поля графического

редактора появляются либо стрелки, которыми соединяются блоки, либо

непосредственно сами блоки. Перед Вами появилось окно графического

редактора (в нем создается и редактируется блок-схема) с набором блоков,

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

Если Вы нажмете комбинацию , то перед Вами появится окно

текстового редактора. В нем Вы можете производить набор и редактирование

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

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

Если Вы решили запустить программу на выполнение, то Вам нужно выбрать

пункт “Интерпретация” в главном меню, а в нем пункт “выполнить”. После

этого, перед Вами появится окно, которое сообщит Вам, были ли допущены Вами

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

следующее окно, которое называется окном интерпретации.

[pic]

После выполнения проверки и обнаружения ошибок выдается сообщение о

наличии ошибок:

[pic]

По окончании интерпретации Вам будет выдано сообщение об том, как

прошел процесс интерпретации (успешно или нет). Сообщение выглядит

следующим образом:

[pic]

Для того чтобы посмотреть значения переменных надо в этом же подменю

выбрать пункт таблица переменных. Выглядеть на мониторе компьютера это

будет так:

[pic]

Чтобы выйти из системы нужно выбрать команду “выход” в меню файл или

нажать клавиши: .

4.4.2.2. Windows версия системы

Для запуска системы под операционную систему Windows, Вы должны

запустить файл “Блок-схема.exe”. На экране появится главное окно программы.

[pic]

Пункты главного меню имеют следующее назначение:

Файл для того, чтобы создать блок-схему алгоритма, считать её с диска,

записать на диск или выйти из системы.

Редактор подменю этого пункта предназначено для создания и

редактирования блок-схем. Оно предоставляет панель инструментов - набор

блоков и стрелок для построения блок-схем, а также предоставляет

возможности удалять блоки и производить разметку экрана координатной

сеткой, а также позволяет работать с буфером обмена.

Редактор текста блока этот пункт предназначен для набора и

редактирования текста внутри блока.

Интерпретация пункты этого меню позволяют запускать пошаговый отладчик,

организуют просмотр таблицы переменных, а также запускают интерпретатор.

Опции задание параметров системы и планшета.

Окно работа с окнами приложения.

Помощь здесь можно будет получать информацию о системе или о языке блок

–схем.

При начальной загрузке отображается короткая панель инструментов, но

после того как Вы создадите либо новую блок-схему, либо будете

редактировать старую, появятся дополнительные панели инструментов. С их

помощью работать с системой становится значительно проще.

[pic]

Если Вы активизируете любой нарисованный блок и выберете пункт меню

“Редактор текста блока” или дважды щелкните левой клавишей мышки на

соответствующем изображении блока, откроется окно текстового редактора.

[pic]

Текстовый редактор позволяет выполнять следующие действия:

[pic]

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

обмена;

. Вставить текст из буфера;

. Изменить шрифт текста;

. Разрешить или запретить доступ к панели инструментов;

. Найти текст по заданому образцу;

. Заменить заданный образец текста на новый текст.

Для выхода из редактора надо нажать клавишу , либо кнопку с

надписью “Выход”.

Если Вы решили запустить программу на выполнение, то Вам нужно выбрать

пункт “Интерпретация” в главном меню, а в нем пункт “выполнить”. После

этого, перед Вами появится окно, которое сообщит Вам, были ли допущены Вами

ошибки при создании программы. Если их не было, то программа запускается на

исполнение, причем процесс выполнения отображается на блок-схеме.

[pic]

Кроме команды "выполнить" возможны следующие команды:

. Пошаговая отладка;

. Следующий шаг;

. Прервать интерпретацию;

. Установить точку входа в программу;

. Экспорт на язык программирования Си.

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

Во время работы транслятора выдается следующее окно,

[pic]

и при обнаружении ошибки выдается окно сообщений, в котором описана

возможная ошибка. Например,

[pic]

А в общем виде это будет выглядеть следующим образом:

[pic]

Если вы захотите изменить параметры планшета, то Вам нужно вызвать

“свойства ” системы. Для этого Вам нужно один раз нажать правую кнопку

мыши. После этого перед Вами появится контекстное меню со следующими

пунктами:

. Удалить блок;

. Копировать блок;

. Вставить блок;

. Вырезать;

. Свойства.

Нажав на пункт свойства, перед Вами появится следующее диалоговое окно:

[pic]

Закладка “Планшет” отвечает за свойства планшета. Закладка “Редактор”

отвечает за свойства текстового и графического редакторов. Закладка

“Интерпретатор” отвечает за параметры интерпретатора.

Для того, чтобы посмотреть значения переменных, надо в меню “Окно”

выбрать пункт “ таблица переменных ”. Выглядеть на мониторе компьютера это

будет так:

[pic]

Здесь отображаются переменные и их значения. Кроме того, существует

возможность редактирования списка переменных.

Чтобы закончить работу с системой нужно выбрать команду “выход” в меню

“файл” или нажать клавиши: .

4.5. Внутреннее представление данных

Перечислим основные структуры данных, используемые в системе “Блок

схема”.

Блок-схема алгоритма представляется как список структур следующего

вида:

struct BLOCK

{

unsigned int type; // тип блока

int x; // координата блока по оси x

int y; // координата блока по оси y

char *text; // текст блока

int true_x; // переход по ИСТИНЕ по оси x на планшете

int true_y; // переход по ИСТИНЕ по оси y на планшете

int false_x; // переход по ЛЖИ по оси x на планшете

int false_y; // переход по ЛЖИ по оси y на планшете

struct BLOCK *next; // указатель на следующий элемент схемы

bool StopRun; // признак точки входа в программу

bool ErrorFlag; // признак наличия ошибок в данном блоке

bool RunBlock; // признак выполнения блока в текущий

момент

struct SVERTKA* Poliz; // полиз текста блока

};

Файл схемы представляет собой последовательность следующих записей:

struct BLOCK

{

unsigned int type; // тип блока

int x; // координата блока по оси x

int y; // координата блока по оси y

char *text; // текст блока

int true_x; // переход по ИСТИНЕ по оси x на планшете

int true_y; // переход по ИСТИНЕ по оси y на планшете

int false_x; // переход по ЛЖИ по оси x на планшете

int false_y; // переход по ЛЖИ по оси y на планшете

};

Таблица переменных образованна следующим образом: она состоит из списка

структур следующего вида:

struct VARIABLE

{

AnsiString Hint; // подсказка при индексации

char* name; // имя переменной

char type; // тип переменной

unsigned int Size; // размерность массива, если Size == 0,

// то это переменная

unsigned int* SizeN;// массив значений размерностей,

// если это переменная то SizeN == NULL

char* ready; // признак готовности к работе переменной

int* __int; // значение переменной типа int

long int* __long_int;// значение переменной типа long int

char* __char; // значение переменной типа char

float* __float; // значение переменной типа float

double* __double; // значение переменной типа double

struct VARIABLE* next;// указатель на следующий элемент таблицы

// переменной

};

Таблица констант также представлена списком структур следующего вида:

struct CONSTANTA

{

unsigned char type; // тип константы

int __long_int; // константа типа long int

int __int; // константа типа int

char __char; // константа типа char

float __float; // константа типа float

double __double; // константа типа double

char* __string; // константа типа string

struct CONSTANTA* next;// указатель на следующий элемент таблицы

};

Последовательность текста блока, как уже говорилось ранее, при

трансляции переводится на внутренний язык транслятора. В данной системе это

список сверток, которые имеют следующую структуру:

struct SVERTKA

{

unsigned char type; // тип свертки

unsigned char intype; // подтип свертки (номер операции, функции,

// процедуры в списке функций)

struct VARIABLE* variable;// если это не переменная то

variable==NULL

// если переменной не существует в таблице

// переменных то variable == NULL

struct CONSTANTA* constanta;//указатель на таблицу констант

// если это не константа то constanta==NULL

// если такой константы не существует в таблице

// констант то constanta == NULL

struct SVERTKA* next; // указатель на следующий элемент свертки

int result; // счетчик числа операндов операций или функции

};

Заключение

Данная работа представляет собой транслятор с языка блок схем.

Система состоит из оболочки, графического редактора блок-схем,

встроенного текстового редактора, интерпретатора, пошагового отладчика и

конвертора на язык Си.

Система отлажена и протестирована на серии примеров. Система

реализована в двух вариантах:

. Под операционную систему MS-Dos,

. Под операционные системы Windows NT, Windows 95, Windows 98.

Размер исполняемого файла в среде MS-Dos 300 Кбайт, в среде Windows 900

Кбайт.

Результаты данной работы были представлены на 6ой международной научно-

практической конференции “Новые информационные технологии в университетском

образовании”, которая проходила в городе Новосибирске с 17 по 19 марта 1999

года. На конференции был сделан доклад (тезисы опубликованы).

Система создавалась с целью обучения студентов первого курса ФПМиК

основам программирования. Предполагается её активное использование.

Литература

1. Лебедев В.Н. Введение в системы программирования. - М: Статистика, 1975.-

315с.

2. Грис Д. Конструирование компиляторов для цифровых вычислительных машин,

- М: Мир, 1975.-544с.

3. Касьянов В.Н. , Поттосин И.В. Методы построения трансляторов.-

Новосибирск: Наука, 1986. -343с.

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

в 2-х томах. - М: Мир, 1978.

5. Соловьёв А.С. Интерпретатор языка блок-схем. // Материалы научно-

практической конференции “Новые информационные технологии в

университетском образовании”. - Новосибирск: Издательство ИДМИ, 1999.-

227с.

6. Демин А.Ю., Гусев А.В. Визуальное программирование программ на основе

блок-схем. // Материалы научно-практической конференции “Новые

информационные технологии в университетском образовании” Новосибирск:

Издательство ИДМИ, 1999.-227с.

7. Паронджанов В.Д. Язык программирования “ДРАКОН” // Программирование. –

1995. - №3.

8. Паронджанов В.Д. Учись рисовать ясные блок-схемы. - М: “Радио и связь”,

1995.

9. Рейсдорф Кент, Хендерсон Кен Освой самостоятельно Borland C++Builder. -

Москва: ЗАО “Издательство БИНОМ”, 1998.-704с.

10. Lee C.Y. An algorithm for path connetion and its applications. // “IRE

Trans.”, V.EC-10 - № 3.

Приложение

Приложение 1: Примеры блок-схем

MS-Dos версия:

[pic]

Windows версия:

[pic]

Пример 1. Нахождение максимума из двух чисел.

[pic]

Пример 2. Сортировка методом пузырька (Windows версия).

[pic]

Пример3. Вычислительная программа (MS-Dos версия)

Приложение 2: Матрицы переходов анализаторов

Матрица лексического анализатора (сканера)

| |0|(|)|+|-|/|*||=|^|||!|[|]|,|;|&|.|(|0|‘|‘|“|

| | | | | | | | | | | | | | | | | | | | | | |’| | |

|0|1|2|2|2|9|1|1|1|1|2|1|1|2|2|2|2|2|2|3|-|E|0|4|6|

| | | |2|2| |2|4|5|7|4|4|8|3|2|2|2|2|2| |9| | | | |

|1|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|-|-|-|0|-|-|

| | | | | | | | | | | | | | | | | | | |1|1|1| |1|1|

|2|-|2|-|0|0|0|0|0|0|0|0|0|0|-|0|0|0|0|3|-|-|0|-|-|

| |1| |1| | | | | | | | | | |1| | | | | |1|1| |1|1|

|3|-|3|-|0|0|0|0|0|0|0|0|0|0|-|0|0|0|0|-|-|-|0|-|-|

| |1| |1| | | | | | | | | | |1| | | | |1|1|1| |1|1|

|4|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|5|

|5|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|7|-|

| |1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1| |1|

|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|6|-|6|6|8|

| | | | | | | | | | | | | | | | | | | | | |1| | | |

|7|-|-|-|0|0|0|0|0|0|0|0|0|0|0|-|0|-|0|0|-|-|0|-|-|

| |1|1|1| | | | | | | | | | | |1| |1| | |1|1| |1|1|

|8|-|-|-|0|-|-|-|-|-|-|-|-|-|-|-|-|0|0|-|-|-|-|0|-|

| |1|1|1| |1|1|1|1|1|1|1|1|1|1|1|1| | |1|1|1|1| |1|

|9|0|0|0|-|1|-|-|-|-|-|1|-|-|-|-|-|-|-|-|0|-|-|0|-|

| | | | |1|0|1|1|1|1|1|1|1|1|1|1|1|1|1|1| |1|1| |1|

|1|-|-|-|0|-|-|0|0|0|0|-|0|0|0|-|0|0|0|0|-|-|-|0|-|

|0|1|1|1| |1|1| | | | |1| | | |1| | | | |1|1|1| |1|

|1|0|0|0|-|-|0|-|-|-|-|-|-|-|-|-|-|-|-|-|0|-|-|0|0|

|1| | | |1|1| |1|1|1|1|1|1|1|1|1|1|1|1|1| |1|1| | |

|1|0|0|0|-|-|1|-|-|-|-|1|-|-|-|-|-|-|-|-|0|-|-|0|0|

|2| | | |1|1|3|1|1|1|1|1|1|1|1|1|1|1|1|1| |1|1| | |

|1|-|-|-|-|0|-|0|0|0|0|-|0|0|0|-|0|0|0|0|-|-|-|0|-|

|3|1|1|1|1| |1| | | | |1| | | |1| | | | |1|1|1| |1|

|1|0|0|0|-|-|-|-|-|-|-|1|-|-|-|-|-|-|-|-|0|-|-|0|0|

|4| | | |1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1| |1|1| | |

|1|0|0|0|-|-|0|-|-|1|0|1|-|-|-|-|-|-|-|-|0|-|-|0|0|

|5| | | |1|1| |1|1|6| |1|1|1|1|1|1|1|1|1| |1|1| | |

|1|0|0|0|-|-|-|-|-|-|-|1|-|-|-|-|-|-|-|-|-|-|-|0|-|

|6| | | |1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1| |1|

|1|0|0|0|-|-|0|-|-|-|1|1|-|-|-|-|-|-|-|-|0|-|-|0|0|

|7| | | |1|1| |1|1|1|6|1|1|1|1|1|1|1|1|1| |1|1| | |

|1|0|0|0|-|-|0|-|-|-|-|1|-|1|-|-|-|-|-|-|0|-|-|0|0|

|8| | | |1|1| |1|1|1|1|1|1|9|1|1|1|1|1|1| |1|1| | |

|1|0|0|0|-|-|0|-|-|-|-|-|-|-|0|-|-|-|-|-|0|-|-|0|0|

|9| | | |1|1| |1|1|1|1|1|1|1| |1|1|1|1|1| |1|1| | |

|2|0|0|0|-|-|-|-|-|-|-|1|-|-|0|-|-|-|-|2|0|-|-|0|0|

|0| | | |1|1|1|1|1|1|1|1|1|1| |1|1|1|1|1| |1|1| | |

|2|0|0|0|-|-|0|-|-|-|-|-|-|-|0|-|-|-|-|-|0|-|-|0|0|

|1| | | |1|1| |1|1|1|1|1|1|1| |1|1|1|1|1| |1|1| | |

|2|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|

|2| | | | | | | | | | | | | | | | | | | | | | | | |

|2|0|0|0|-|-|-|-|-|-|-|1|-|-|0|-|-|-|-|-|0|-|-|0|0|

|3| | | |1|1|1|1|1|1|1|1|1|1| |1|1|1|1|1| |1|1| | |

|2|0|0|0|-|-|0|-|-|-|-|1|-|-|-|-|-|-|-|-|0|-|-|0|0|

|4| | | |1|1| |1|1|1|1|1|1|1|1|1|1|1|1|1| |1|1| | |

Матрица синтаксических переходов блока “НАЧАЛО”

|сост|Иден|Конс|Int |Long|Char|Floa|Doub|, |; |[ |] |NULL|( |

|ояни|тифи|тант| | | |t |le | | | | | | |

|е |като|а | | | | | | | | | | | |

| |р | | | | | | | | | | | | |

|0 |-30 |-31 |2 |1 |2 |2 |2 |-32 |-32 |-32 |-32 |Е |-32 |

|1 |-30 |-31 |2 |-30 |-30 |-30 |-30 |-32 |-32 |-32 |-32 |-32 |-32 |

|2 |3 |-33 |-33 |-33 |-33 |-33 |-33 |-32 |-32 |-32 |-32 |-32 |-32 |

|3 |-32 |-32 |-32 |-32 |-32 |-32 |-32 |2 |0 |4 |-32 |-32 |-32 |

|4 |-34 |5 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |

|5 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |4 |-34 |-34 |6 |-34 |-34 |

|6 |-34 |-34 |-34 |-34 |-34 |-34 |-34 |2 |0 |-34 |-34 |-34 |-34 |

Матрица синтаксических переходов блока “ВВОД”

|Состояние |идентификатор |[ |, |; |( |NULL |

|0 |1 |-35 |-35 |-35 |-35 |-35 |

|1 |-35 |1 \ 0 |0 |2 |-35 |-35 |

| | |\-36 | | | | |

|2 |1 |-35 |-35 |-35 |-35 |Выход |

Матрица синтаксических переходов индексации массивов 1

|1 |. |. |. |2\0|. |. |3 |3 |. |. |3 |3 |3 |3 |3|. |Е |. |.|

|2 |. |. |. |. |. |. |3 |3 |. |. |3 |3 |3 |3 |3|. |Е |. |.|

|3 |1 |. |2 |. |. |. |. |. |. |. |. |. |. |. |.|1\1 |. |. |.|

|4 |1 |. |2 |. |. |. |. |. |. |. |. |. |. |. |.|1\1 |. |. |.|

Матрица синтаксических переходов индексации массивов 2

|1 |. |. |. |2\0|Е |0 |3 |3 |. |. |3 |3 |3 |3 |3|. |. |. |.|

|2 |. |. |. |. |Е |0 |3 |3 |. |. |3 |3 |3 |3 |3|. |. |. |.|

|3 |1 |. |2 |. |. |. |. |. |. |. |. |. |. |. |.|5\1 |. |. |.|

|4 |1 |. |2 |. |. |. |. |. |. |. |. |. |. |. |.|5\1 |. |. |.|

|5 |. |. |. |. |Е |0 |3 |3 |. |. |3 |3 |3 |3 |3|5\1 |. |. |.|

Матрица синтаксических переходов функции strlen

|состояни|Идентифи|[ |) |( |NULL |( |Констант|

|е |-катор | | | | | |а |

|0 |. |. |. |. |. |2 |. |

|1 |. |3 \ 0 |Выход |. |. |. |. |

|2 |1 |. |. |. |. |. |4 |

|3 |. |. |Выход |. |. |. |. |

|4 |. |. |Выход |. |. |. |. |

Матрица синтаксических переходов блока “ВЫВОД”

|сос|Кон|Кон|1 |2 |5 |Clo|Str|, |( |[ |; |Иде|( |NUL|) |

|тоя|ста|ста| | | |ck |len| | | | |нти| |L | |

|ние|нта|нта| | | | | | | | | |фик| | | |

| |str| | | | | | | | | | |ато| | | |

| | | | | | | | | | | | |р | | | |

|0 |1 |2 |5 |. |4 |6 |2\2|. |2\3|. |. |9 |. |. |. |

|1 |. |. |. |. |. |. |. |0 |. |. |10 |. |. |. |. |

|2 |. |. |. |3 |. |. |. |0 |. |. |10 |. |. |. |. |

|3 |. |2 |. |. |4 |6 |2\2|. |2\3|. |. |9 |. |. |. |

|4 |. |. |. |. |. |. |. |. |2\3|. |10 |. |. |. |. |

|5 |. |2 |. |. |4 |6 |2\2|. |2\3|. |. |9 |. |. |. |

|6 |. |. |. |. |. |. |. |. |7 |. |. |. |. |. |. |

|7 |. |. |. |. |. |. |. |. |. |. |. |. |. |. |8 |

|8 |. |. |. |3 |. |. |. |0 |. |. |10 |. |. |. |. |

|9 |. |. |. |3 |. |. |. |0 |. |2\0|10 |. |. |. |. |

|10 |1 |2 |5 |. |4 |6 |2\2|. |2\3|. |. |9 |. |Е |. |

Матрица синтаксических переходов блока “Автоматические действия”

|Сос|Кон|Кон|Иде|( |[ |; |1 |2 |3 |5 |Clo|Get|Kbh|Str|) |( |NUL|

|тоя|ста|ста|нти| | | | | | | |ck |ch |it |len| | |L |

|ние|нта|нта|фик| | | | | | | | | | | | | | |

| |str| |. | | | | | | | | | | | | | | |

|0 |. |. |1 |. |. |. |. |. |. |. |. |. |. |. |. |. |. |

|1 |. |. |. |2\0|. |. |. |3 |. |. |. |. |. |. |. |. |. |

|2 |. |. |. |. |. |. |. |3 |. |. |. |. |. |. |. |. |. |

|3 |. |4 |5 |4\3|. |. |6 |. |. |8 |13 |10 |13 |4\2|. |. |. |

|4 |. |. |. |. |. |9 |. |7 |. |. |. |. |. |. |. |. |. |

|5 |. |. |. |. |4\0|9 |. |7 |. |. |. |. |. |. |. |. |. |

|6 |. |4 |5 |4\3|. |. |. |. |. |8 |13 |. |13 |4\2|. |. |. |

|7 |. |4 |5 |4\3|. |. |. |. |. |8 |13 |. |13 |4\2|. |. |. |

|8 |. |. |. |4\3|. |. |. |. |. |. |. |. |. |. |. |. |. |

|9 |. |. |1 |. |. |. |. |. |. |. |. |. |. |. |. |. |Е |

|10 |. |. |. |11 |. |. |. |. |. |. |. |. |. |. |. |. |. |

|11 |. |. |. |. |. |. |. |. |. |. |. |. |. |. |12 |. |. |

|12 |. |. |. |. |. |9 |. |. |. |. |. |. |. |. |. |. |. |

|13 |. |. |. |14 |. |. |. |. |. |. |. |. |. |. |. |. |. |

|14 |. |. |. |. |. |. |. |. |. |. |. |. |. |. |4 |. |. |

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

|сост|иден|Конс|Конс|1 |2 |5 |Cloc|Strl|( |[ |) |( |NULL|

|ояни|тифи|тант|тант| | | |k |en | | | | | |

|е |като|а |а | | | | | | | | | | |

| |р |str | | | | | | | | | | | |

|0 |1 |. |3 |4 |. |5 |6 |3\2 |3\3 |. |. |. |. |

|1 |. |. |. |. |2 |. |. |. |. |3\0 |Е |. |. |

|2 |1 |. |3 |. |. |5 |6 |3\2 |3\3 |. |. |. |. |

|3 |. |. |. |. |2 |. |. |. |. |. |Е |. |. |

|4 |1 |. |3 |. |. |5 |6 |3\2 |3\3 |. |. |. |. |

|5 |. |. |. |. |. |. |. |. |3\3 |. |. |. |. |

|6 |. |. |. |. |. |. |. |. |7 |. |. |. |. |

|7 |. |. |. |. |. |. |. |. |. |. |3 |. |. |

Матрица синтаксических переходов блока “Подпрограмма”

|Состоя|Конста|иденти|[ |; |, |2 |Progra|( |NULL |

|ние |нта |фикато| | | | |mm | | |

| |str |р | | | | | | | |

|0 |. |1 |. |. |. |. |4 |. |. |

|1 |. |. |2 \ 0 |. |. |3 |. |. |. |

|2 |. |. |. |. |. |3 |. |. |. |

|3 |. |. |. |. |. |. |4 |. |. |

|4 |6 |5 |. |. |. |. |. |. |. |

|5 |. |. |. |. |4 |. |. |. |. |

|6 |. |. |. |7 |. |. |. |. |. |

|7 |. |. |. |. |. |. |. |. |Выход |

Матрица синтаксических переходов блоков “Метка” и “Безусловный переход”

|Состояние |Константа |; |( |NULL |

|0 |1 |. |. |. |

|1 |. |2 |. |. |

|2 |. |. |. |Выход |

Матрица синтаксических переходов блока “Ветвление по условию”

|состо|Конст|Конст|Идент|( |[ |! |4б |; |( |NULL |

|яние |анта |анта |ифика| | | | | | | |

| |str | |тор | | | | | | | |

|0 |. |1 |2 |3 \ 4|. |4 |. |. |. |. |

|1 |. |. |. |. |. |. |5 |6 |. |. |

|2 |. |. |. |. |3 \ 0|. |5 |6 |. |. |

|3 |. |. |. |. |. |. |5 |6 |. |. |

|4 |. |. |2 |. |. |. |. |. |. |. |

|5 |. |1 |2 | 1 \ |. |4 |. |. |. |. |

| | | | |4 | | | | | | |

|6 |. |. |. |. |. |. |. |. |. |Выход|

Вспомогательная матрица синтаксических переходов блока

“ Ветвление по условию ”

|состо|Конст|Конст|идент|( |[ |! |4б |) |( |NULL |

|яние |анта |анта |ифика| | | | | | | |

| |str | |тор | | | | | | | |

|0 |. |1 |2 |3 \ 4|. |4 |. |. |. |. |

|1 |. |. |. |. |. |. |5 |Выход|. |. |

|2 |. |. |. |. |3 \ 0|. |5 |Выход|. |. |

|3 |. |. |. |. |. |. |5 |Выход|. |. |

|4 |. |. |2 |. |. |. |. |. |. |. |

|5 |. |1 |2 |1 \ 4|. |4 |. |. |. |. |

Матрица синтаксических переходов блока “Стрелка”

|состояние |true |false |; |( |NULL |

|0 |1 |1 |. |. |Выход |

|1 |. |. |2 |. |. |

|2 |. |. |. |. |Выход |

Матрица синтаксических переходов блока “Мультиветвление”

|Состояние |Идентификатор |; |( |NULL |

|0 |1 |. |. |. |

|1 |. |2 |. |. |

|2 |. |. |. |Выход |

Матрица синтаксических переходов блока “Конец”

|состояние |Return |; |( |( |NULL |

|0 |1 |. |. |. |. |

|1 |. |3 |2 \ 3 |. |. |

|2 |. |3 |. |. |. |

|3 |. |. |. |. |Выход |

Приложение 3: Текст основных классов программы

Описание класса блок-схемы алгоритма:

файл описание класса ClassScheme (класс схемы)

разработан для языка блок схем, который используется

в интерпретаторе Basic Block for Windows 95 ver. 2.0.

Copyright(c) by Соловьев А.С., 1998 г., ТГУ, ФПМК,

кафедра программирования

#ifndef __CLASS_SCHEME

#define __CLASS_SCHEME

#ifndef __STRUCT_FILE

#include "struct.h"

#endif

// подключаемые библиотеки

#include

#include

#include

#include

// описатели типов блоков

#define BEGIN_BLOCK 0// блок типа начало

#define END_BLOCK 1// блок типа конец

#define IF_BLOCK 2// блок типа если

#define INPUT_BLOCK 3// блок типа ввод

#define OUTPUT_BLOCK 4// блок типа вывод

#define PP_BLOCK 5// блок типа подпрограмма

#define AD_BLOCK 6// блок типа автоматические действия

#define LABEL_BLOCK 7// блок типа метка

#define BP_BLOCK 8// блок типа безусловный переход на метку

#define MULTI_BLOCK 9// блок типа мультиветвление

#define VETV_BLOCK 10// блок типа ветвь

#define UP_BLOCK 11// блок стрелка вверх

#define DOWN_BLOCK 12// блок стрелка вниз

#define UP_RIGHT_BLOCK 13// блок стрелка вверх и направо

#define UP_LEFT_BLOCK 14// блок стрелка вверх и налево

#define DOWN_LEFT_BLOCK 15// блок стрелка вниз и налево

#define DOWN_RIGHT_BLOCK 16// блок стрелка вниз и направо

#define LEFT_BLOCK 17// блок стрелка налево

#define RIGHT_BLOCK 18// блок стрелка направо

#define RIGHT_UP_BLOCK 19// блок стрелка направо и вверх

#define LEFT_UP_BLOCK 20// блок стрелка налево и вверх

#define LEFT_DOWN_BLOCK 21// блок стрелка налево и вниз

#define RIGHT_DOWN_BLOCK 22// блок стрелка направо и вниз

// описатели типов стрелок

class ClassScheme

{

public:

bool TypeOfProgramm;// тип программы (подпрограмма==true)

char *FileNameScheme;// имя файла с которым мы работаем

struct BLOCK* HeapBlock;// указатель на вершину списка блоков схемы

struct SVERTKA* SvertkaBlock;// указатель на свертку блока

struct BLOCK* Buffer;// указатель на блок сидящий в буффере

struct VARIABLE* HeapVariable;// указатель на вершину таблицы

переменных

struct CONSTANTA* HeapConst;//указатель на таблицу констант

struct Rects RectPl;// параметры планшета схемы

struct CONSTANTA* MultiConst;// свертка блока мультиветвления

bool FlagRun;// признак выполняется программа или нет

// вспомогательные функции

int Poisk_Function(char *,int ,char* []);//поиск функции//Ok

void DeleteVariable(struct VARIABLE* );//удалить таблицу

переменных//Ok

void DeleteSvertka(struct SVERTKA*);//удалить свертку//Ok

void DeleteConst(struct CONSTANTA* );//удалить таблицу констант//Ok

int ClassSimbol(const char&);//класс символа//Ok

int LenTextBlock(char*);//длинна текста блока// Ok

void DeleteScheme(struct BLOCK*); //Удалить схему// Ok

void CopyStrToStr(char *,char *); //Копировать строку в строку//Ok

int AddStringToTextBlock(struct BLOCK *,char *);//Добавить строку к

//тексту блока//Ok

void GetsStringFromFile(FILE *,char *);//Прочитать строку из

файла//Ok

// конструкторы

ClassScheme();

// функции для чтения записи схемы

unsigned char LoadFromFile(char *);// функция для считывания файла

// с диска //Ok

unsigned char SaveToFile(char *); // функция для записи файла на

// диск // Ok

// функции для интерпретации блок-схемы

struct VARIABLE* PoiskVar(char* );//поиск переменной по имени//Ok

struct VARIABLE* CreateVar(char*, char,unsigned int,unsigned

int*,int);

//создать переменную с параметрами//Ok

struct CONSTANTA* CreateConst(unsigned char,char*);//создание

константы//Ok

unsigned char TextBlockToSvertka(char *, int);//функция для

построения

// свертки блока//Ok

int ClassSvertka(struct SVERTKA* ,int [][2],int ,int ,int );// класc

свертки//Ok

void UnarOperation(struct SVERTKA*);// определяет унарные

// операции которые обозначены как n-арные(+,-)//Ok

struct SVERTKA* Insetr(struct SVERTKA* ,unsigned char);//вставка

// оператора в начала последовательности и после ';' //Ok

unsigned char Sintacsis(struct SVERTKA*,int [][2],int,int,int,int*,

int*);// проверка синтаксиса свертки//Ok

struct SVERTKA* SintacsisHelp(struct SVERTKA*,int [][2],int,int,int,

int*,int*);// проверка синтаксиса свертки//Ok

struct SVERTKA* Polis(struct SVERTKA*);//построение полиза//Ok

struct SVERTKA* Stek(struct SVERTKA* ,int);//поиск элемента стека

если

// его нет то создание

его//Ok

struct SVERTKA* Run(unsigned char,int&,struct SVERTKA*,int,

struct SVERTKA*);//

// выполнение конкретной операции

unsigned char Run(struct SVERTKA* );//функция выполнения

//команд полиза//Ok

unsigned char RunBegin(struct SVERTKA*);//выполнение команд блока

начало//Ok

unsigned char Translation1(void);//Первый этап трансляции//Ok

unsigned char Translation2(void);//второй этап трансляции//Ok

unsigned char Translation3(void);//Третий этап трансляции

struct BLOCK* BpFunction(struct BLOCK*);//выполнение связки БП//Ok

float Trigonometria(struct SVERTKA*,int&);

// обработчик тригонометрических функций//Ok

struct SVERTKA* NewSvertka(int&,unsigned char,unsigned char);

// построение новой свертки//Ok

// функции поиска блока

struct BLOCK *Poisk(struct BLOCK *);// поиск блока по адресу//Ok

struct BLOCK *Poisk(int,int);// поиск блока по заданным

координатам//Ok

struct BLOCK *Poisk(unsigned int);// поиск блока по типу блока//Ok

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

void Add(struct BLOCK*);//добавить блок к схеме//Ok

struct BLOCK *Create(unsigned int,int,int,int,int,int,int,char *);

// создать блок по параметрам//Ok

struct BLOCK* Cut(struct BLOCK* );//вырезать блок из схемы//Ok

void DelBlock(struct BLOCK* );//удалить блок из схемы по адресу//Ok

void DelBlock(int ,int );//удалить блок из схемы по координатам//Ok

// функции для работы с буфером обмена блоков схемы

void CopyBuffer(struct BLOCK*);//скопировать блок в буфер обмена

//по адресу//Ok

void CopyBuffer(int x,int y);//скопировать блок в буфер обмена

//по заданным координатам//Ok

void CutBuffer(struct BLOCK*);//вырезать блок из схемы и занести

//в буффер обмена по адресу //Ok

void CutBuffer(int x, int y);//вырезать блок из схемы и занести

//в буффер обмена по координатам //Ok

void PasteFromBuffer(int, int);//добавить блок в схему в позицию

x,y/Ok

// функции вычисления размеров планшета(минимальных)

void SizeOfPlanhet( void );//Ok

// Функции алгоритма Ли

void AddNumber(int*,int,int,int,int,int);//добавить число//Ok

int Maximum(int*,int,int,int,int);//найти максимум//Ok

float Rastoanie(int,int,int,int);//Вычислить расстояние//Ok

void Index(int*,int,int,int,int,int,int,int,int &,int

&);//Определение

//индекса//Ok

bool Algoritm(int*,int,int,int,int,int,int);//Алгоритм//Ok

int* MatrLee( int&,int&,int,int,int,int);// построение матрицы//Ok

bool StartLee(int,int,int,int);//стартовая функция Ли//Ok

// деструкторы

~ClassScheme();

};

#endif

Файл объявления основных структур программы:

Файл описание основных структур используемых интерпретатором

языка блок-схем Basic Block for Windows 95 ver 2.0.

Copyright(c) 1998, Соловьев А.С. 1998/1999 гг.

#ifndef __STRUCT_FILE

#define __STRUCT_FILE

struct NameOfVar

{

char* name;

struct NameOfVar* next;

};

struct Rects

{

int Left;

int Top;

int Right;

int Bottom;

};

struct BLOCK

{

unsigned int type; // тип блока

int x; // координата блока по оси x

int y; // координата блока по оси y

char *text; // текст блока

int true_x; // переход по ИСТИНЕ по оси x на планшете

int true_y; // переход по ИСТИНЕ по оси y на планшете

int false_x;// переход по ЛЖИ по оси x на планшете

int false_y;// переход по ЛЖИ по оси y на планшете

struct BLOCK *next; // указатель на следующий элемент схемы

bool StopRun;// прнизнак точки входа в программу

bool ErrorFlag;// признак наличия ошибок в данном блоке

bool RunBlock;// признак выполнимого блока в текущий момент

struct SVERTKA* Poliz;// полиз текста блока с учетом свертки

};

struct VARIABLE

{

AnsiString Hint; // подсказка при индексации

char* name; // имя переменной

char type; // тип переменной

unsigned int Size; // размерность массива если Size == 0,

// то это переменная

unsigned int* SizeN; // массив значений размерностей,

// если это переменная то SizeN == NULL

char* ready; // признак готовности к работе переменной

int* __int; // значение переменной типа int

long int* __long_int; // значение переменной типа long int

char* __char; // значение переменной типа char

float* __float; // значение переменной типа float

double* __double; // значение переменной типа double

struct VARIABLE* next;// указатель на следующий элемент таблицы

// переменной

};

struct CONSTANTA

{

unsigned char type;// тип константы

int __long_int; // константа типа long int

int __int; // константа типа int

char __char; // константа типа char

float __float; // константа типа float

double __double; // константа типа double

char* __string; // константа типа string

struct CONSTANTA* next;// указатель на следующий элемент таблицы

};

struct SVERTKA

{

unsigned char type; // тип свертки

unsigned char intype; // подтип свертки (номер операции, функции,

// процедуры в списке функций)

struct VARIABLE* variable;// если это не переменная то

variable==NULL

// если переменной не существует в таблице

// переменных то variable == NULL

struct CONSTANTA* constanta;//указатель на таблицу констант

// если это не константа то constanta==NULL

// если такой константы не существует в

таблице

// констант то constanta == NULL

struct SVERTKA* next; // указатель на следующий элемент свертки

int result; // счетчик числа операндов операции или функции

};

#endif

-----------------------

‘a’;

Переменная1;

сортировка1(x, y, z);

метка1;

“Переменная y=”,y;

“Переменная x=”,x;

a<=x && (x != f || f == z );

a=b*(c+d)-w;

f=g;

f, s, a;

метка1;

Int x,y,max;

x,y;

x

max=y;

max=x;

“max=”,max;

конец

Входная программа

. Поиск блока “начало”

. Построение свертки текста блока

. Проверка синтаксиса блока “начало”

. Выделение памяти под переменные

. Построение сверток всех блоков

. Проверка синтаксиса блоков

. Построение ПолИЗа

. Установка связей между блоками

. Проверка правильности связей

. Трансляция и выполнение

. Пошаговая трансляция

При переводе на вутренний язык тран-слятора сначала вы-полняется лексиче-

ский анализ, а затем синтаксический

Этап семантического анализа

Входная программа

Сканер

Класс символов

L,T

4 2 3 1 0 -1

Формиро-вание кода ошибки

L-служебное слово ?

Занесение в таблицу имен

Занесение в таблицу констант

Формирование дескриптора

Конец входной программы ?

Конец

Синтаксический анализ

+

x

3

+

-

1. Выборка очередного символа из обратной польской записи

2.

S – операнд ?

3. CO[i]=S;

i=i+1;

4. S – знак операции ?

8.

конец ?

5. Определение минимального номера рабочей переменной

6. Выполнение подпрограммы формирования машинных команд

7. CO[i-k]=rl;

i=i-k+1;

j=l+1;

9. Занесение в таблицу ошибок.

10. i==2 &&

CO[l]= rl?

Выход

Входная программа

Анализ

Трансляция

Оптимизация

Программа на внутреннем языке

Анализ

Трансляция

Оптимизация

Программа на объектном (машинном) языке

Страницы: 1, 2, 3


© 2010 БИБЛИОТЕКА РЕФЕРАТЫ