Продовження перекладу MLMP з Pascal на C. Фрагмент.
//--------------------
// MLMP Library
//--------------------
#include "pasemul.h"
#include "Counter.h"
#include "Memory.h"
#include "Module15.h"
#define BufSize 250 //+
#define StackSize 1000 //+
extern TP70_String cmExit = "Выход_из_программы";
extern TP70_String cmGoto = "Перейти_к";
extern TP70_String cmEQUid = ":=";
extern TP70_String cmvEQUid = "=";
extern TP70_String cmbLeft = "";
extern TP70_String cmRepeat = "Цикл";
extern TP70_String cmWrForX = "Записать_значение_цикла_в";
extern TP70_String cmExWFor = "Выход_из_цикла";
extern TP70_String cmVar = "Создать_переменную";
extern TP70_String cmReal = "Реальное_число";
extern TP70_String cmInteger = "Целое_число";
extern TP70_String cmString = "Строка_символов";
extern TP70_String cmChar = "Один_символ";
class MyVar //+
{ //+
public: //+
TP70_String* Name;
float* R;
int* I;
TP70_String* S;
char* C; //+
}; //+
int MFinder[StackSize+1]; //+
int BFinder[BufSize+1]; //+
class MType : public ThisProgram //+
{ //+
public: //+
GString* List[100+1];
int* MyMem[1000+1];
}; //+
class MClass : public ThisProgram //+
{ //+
public: //+
TP70_String* List[100+1];
int* MyMem[1000+1];
TP70_String* Proc[100+1];
TP70_String* Func[100+1];
}; //+
class COMMAND : public ThisProgram //+
{ //+
public: //+
TP70_String ErrMsg;
int NumRC; //+
TP70_String Buffer[BufSize+1];
TP70_String GetLastCommand();
TP70_String GetNLastCommand(int N);
int RunLabel(TP70_String Str);
int cEQUDecode(TP70_String MLT, TP70_String S, MyVar EQU);
void ClearBuffer();
void SetCommandLine(TP70_String Str);
void ReWriteBuffer(TP70_String Str);
void RunBuffer();
void RunCommand(TP70_String Str);
void MLGotoCommand(TP70_String Command);
void MLForCommand(TP70_String Command);
void MLWriteForIntoX(TP70_String Command);
void MLExitWithFor(TP70_String Command);
void MLIfCommand(TP70_String Command);
void MLProcedureCommand(TP70_String Command);
void MLFunctionCommand(TP70_String Command);
void MLTypeCommand(TP70_String Command);
void MLObjectCommand(TP70_String Command);
void MLConstCommand(TP70_String Command);
void MLVarCommand(TP70_String Command);
}; //+
class MLEQUs : public Command //+
{ //+
public: //+
int EQUDecode(TP70_String MLT, TP70_String S, MyVar EQU);
float RealDecode(TP70_String Str);
int IntegerDecode(TP70_String Str);
bool BoolIfer(TP70_String Str);
void ChangeAllsVariables(TP70_String MStr);
void ChangeAllsSignAndSaves(TP70_String S, char Ch);
void CountAllsOperand(TP70_String S, float R);
}; //+
class MLRepeat //+
{ //+
public: //+
int i; //+
int Activ;
TP70_String RLabel;
}; //+
class MLRep : public ThisProgram //+
{ //+
public: //+
MLRepeat RBuffer[BufSize+1];
int Init(TP70_String S);
bool Done(TP70_String S);
void ClearList(); //+
}; //+
Субмодуль 1.
class MMemory : public ThisProgram //+
{ //+
public: //+
MyVar* Variables[StackSize+1];
int NewVar(TP70_String Name, TP70_String NVType, MyVar EQU);
int NewType(TP70_String Name, int Size, MType List);
int NewClass(TP70_String Name, int Size, MClass List);
int ReWStack(TP70_String Name, TP70_String NVType, MyVar EQU);
void FindInMemory(TP70_String Name, MFinder F);
void FindInBuffer(TP70_String Name, BFinder F);
void ClearMem(); //+
}; //+
MMemory* MLMemory;
COMMAND* C;
MLEQUs* EQUs;
MLRep* MLR;
Субмодуль 2.
GString COMMAND::GetLastCommand()
{
int i = 1; //+
while(Buffer!="")
{ //+
i++; //+
}; //+
i = i - 2; //+
GetLastCommand = Buffer;
}
Субмодуль 3.
GString COMMAND::GetNLastCommand(int N)
{
int i = 1; //+
while(Buffer!="")
{ //+
i++; //+
}; //+
if(N>BufSize-2) //+
{ //+
GetNLastCommand = "КОММАНДА УТЕРЕНА(Buffer=100) (N>98)!";
} else //+
{ //+
N++; //+
i = i - N; //+
GetNLastCommand = Buffer;
}; //+
if(N>BufSize-2) //+
{ //+
ErrMsg = "КОММАНДА УТЕРЕНА(Buffer=100) (N>98)!";
}; //+
}
Продовження за адресою :





