
- •Национальный исследовательский университет «Московский энергетический институт» Институт автоматики и вычислительной техники Кафедра математического моделирования
- •Оглавление
- •Void Prints(rez &r)
- •Void __fastcall tForm1::BitBtn1Click(tObject *Sender)
- •LeksBlok.H
- •Void Strcpy(char mas[], int n, char *txt, int m);
- •Void LeksichBlok(Ident &I, char *txt);
- •LeksBlok.Cpp
- •Void LeksichBlok(Ident &I, char *txt)
- •Sintaksis.H
- •Void Sint(Ident &I, rez &r);
- •Sintaksis.Cpp
- •Void Sint(Ident &I, rez &r)
- •Interpretator.H
- •Void Inter(Ident &I, rez &r);
- •Interpretator.Cpp
- •Void Inter(Ident &I, rez &r)
- •Data.Cpp
- •Ident::Ident()
- •Void Ident::Delete(elem el)
- •Stack_mass.H
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';
}
//------------------------------------------------------------------------------------------------------------------------------------------------------