Интерпретация блок-схем
|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, 4, 5, 6
|