Смекни!
smekni.com

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

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

состояние

Константа str

Константа

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

(

[

!

)

"

NULL

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 <math.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

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

#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