Смекни!
smekni.com

Интерпретация блок-схем (стр. 11 из 18)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

· Вырезать;

· Свойства.

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

Закладка “Планшет” отвечает за свойства планшета. Закладка “Редактор” отвечает за свойства текстового и графического редакторов. Закладка “Интерпретатор” отвечает за параметры интерпретатора.

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

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

Чтобы закончить работу с системой нужно выбрать команду “выход” в меню “файл” или нажать клавиши: <Alt><X>.

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 версия:

Windows версия:

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

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

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

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

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

0 ( ) + - / * < > = ^ | ! [ ] , ; & . " 0 ‘’
0 1 2 22 22 9 12 14 15 17 24 14 18 23 22 22 22 22 22 3 -9 E 0 4 6
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 0 -1 -1
2 -1 2 -1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 3 -1 -1 0 -1 -1
3 -1 3 -1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -1 -1 -1 0 -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 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 7 -1
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -1 6 6 8
7 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 -1 0 -1 0 0 -1 -1 0 -1 -1
8 -1 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 -1 -1 -1 -1 0 -1
9 0 0 0 -1 10 -1 -1 -1 -1 -1 11 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 -1 0 -1
10 -1 -1 -1 0 -1 -1 0 0 0 0 -1 0 0 0 -1 0 0 0 0 -1 -1 -1 0 -1
11 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 -1 0 0
12 0 0 0 -1 -1 13 -1 -1 -1 -1 11 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 -1 0 0
13 -1 -1 -1 -1 0 -1 0 0 0 0 -1 0 0 0 -1 0 0 0 0 -1 -1 -1 0 -1
14 0 0 0 -1 -1 -1 -1 -1 -1 -1 11 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 -1 0 0
15 0 0 0 -1 -1 0 -1 -1 16 0 11 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 -1 0 0
16 0 0 0 -1 -1 -1 -1 -1 -1 -1 11 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 -1
17 0 0 0 -1 -1 0 -1 -1 -1 16 11 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 -1 0 0
18 0 0 0 -1 -1 0 -1 -1 -1 -1 11 -1 19 -1 -1 -1 -1 -1 -1 0 -1 -1 0 0
19 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 0 -1 -1 0 0
20 0 0 0 -1 -1 -1 -1 -1 -1 -1 11 -1 -1 0 -1 -1 -1 -1 21 0 -1 -1 0 0
21 0 0 0 -1 -1 0 -1 -1 -1 -1 -1 -1 -1 0 -1 -1 -1 -1 -1 0 -1 -1 0 0
22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23 0 0 0 -1 -1 -1 -1 -1 -1 -1 11 -1 -1 0 -1 -1 -1 -1 -1 0 -1 -1 0 0
24 0 0 0 -1 -1 0 -1 -1 -1 -1 11 -1 -1 -1 -1 -1 -1 -1 -1 0 -1 -1 0 0

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