“ Ветвление по условию ”
состояние | Константа str | Константа | идентификатор | ( | [ | ! | 4б | ) | " | 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 | . | . | . | . | Выход |
Описание класса блок-схемы алгоритма:
файл описание класса 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