Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет Л.р.4 ШАВРОВА.docx
Скачиваний:
8
Добавлен:
31.03.2015
Размер:
1.49 Mб
Скачать

Void __fastcall tForm1::BitBtn1Click(tObject *Sender)

{

try

{

char *txt = Memo1->Lines->GetText();

Ident I;

rez R;

LeksichBlok(I, txt);

Sint(I, R);

Inter(I, R);

ShowMessage("Допустимая цепочка.");

Prints(R);

}

catch(ErrSimb)

{

ShowMessage("Ошибка! Отсутствующий в данной грамматике символ!");

return;

}

catch(ErrOverFlow)

{

ShowMessage("Ошибка! Переполнение массива mas!");

return;

}

catch(ErrIdent)

{

ShowMessage("Ошибка! После цифры не может стоять буква!");

return;

}

catch(ErrSearch)

{

ShowMessage("Ошибка! Не найден искомый символ!");

return;

}

catch(ErrInvChain)

{

ShowMessage("Ошибка! Недопустимая цепочка!");

}

}

LeksBlok.H

#ifndef LeksBlokH

#define LeksBlokH

#include "DataBase.h"

Void Strcpy(char mas[], int n, char *txt, int m);

Void LeksichBlok(Ident &I, char *txt);

#define C_IDENTIF 0 //класс "идентификатор"

#define C_KEY_WORD 1 //класс "ключевое слово"

#define C_INT 2 //класс "константа"

#define C_RAZDEL 3 //класс "разделитель"

#define C_NOV 4 //новый элемент в области данных

#define T_S 10 //терминал S

#define T_SOVOK_OPER 11 //и другие терминалы…

#define T_OPER 12

#define T_OPER_PRISV 13

#define T_E 14

#define T_E_SPIS 15

#define T_T 16

#define T_T_SPIS 17

#define T_F 18

#define T_F_SPIS 19

#define T_P 20

#define T_OPER_IF 21

#define T_ELSE_PART 22

#define T_OPER_CYCLE 23

#define T_LOG_VIR 24

#define T_LOG_SPIS 25

#define S_RAVN 26 //символ "равно"

#define S_T_Z 27 //символ "точка с запятой"

#define S_SK_LEFT 28 //символ "левая скобка"

#define S_SK_RIGHT 29 //символ "правая скобка"

#define KS_THEN 30 //ключевое слово "then"

#define KS_END_WHILE 31 //ключевое слово "end_while"

#define K_PRISV 32 //команда присвоить

#define K_SLOJ 33 //команда сложить

#define K_UMNOJ 34 //команда умножить

#define K_V_STEP 35 //команда возсести в степень

#define K_PEREHOD_0 36 //команда переход, если утв. ложно

#define K_PEREHOD_BEZ_USL 37 //команда безусловный переход

#define K_PEREHOD_SRAVN 38 //команда переход по сравнению

#define K_RAVNO 39 //команда логическое равно

#define K_NE_RAVNO 40 //команда логическое не равно

#define K_METKA 41 //метка

#endif

LeksBlok.Cpp

#pragma hdrstop

#include "LeksBlok.h"

#include "string.h"

//------------------------------------------------------------------------------------------------------------------------------------------------------

void Strcpy(char mas[], int n, char *txt, int m) //скопировать n символов из txt в mas, начиная с m-го

{

for (int i = 0; i < n; ++i)

{

mas[i] = txt[i + m];

}

mas[n] = '\0';

}

//------------------------------------------------------------------------------------------------------------------------------------------------------