//---------------------------------------------------------------------------
#pragma hdrstop
#include <stdio.h>
#include <string.h>
//---------------------------------------------------------------------------
class Analiz
{
private:
int Stat;
int Vloj;
public:
char *Input;
char *Output;
Analiz();
int Error;
int Result(int err, char const *tmp = '\0');
};
int Analiz::Result(int err, char const *tmp)
{
char *temp;
switch (err)
{
case 0: temp = "Верно 0"; break;
case 1: temp = "Пропущен операнд 1"; break;
case 2: temp = "Неверно расставлены скобки 2"; break;
case 3: temp = "Неверный символ 3 ", strcat(temp, tmp);break;
case 4: temp = "Пропущен оператор 4 ";break;
case 5: temp = "Не заданы параметры функции 5";strcat(temp,tmp); break;
case 6: temp = "Неизвестная функция 6 ",strcat(temp,tmp);break;
case 7: temp = "Неверное имя 7 ", strcat(temp,tmp);break;
case 8: temp = "Неверная константа 8 ", strcat(temp, tmp);break;
}
Output = temp;
return Error = err;
}
Analiz::Analiz()
{
int i;
int j = 0;
Stat=1;
Error = 0;
const char number[] = " 0123456789";
const char liter[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
const char znak[] = " -*/+";
const char func[] = "cos sin tg ctg ln log sign exp";
char tmp[100];
// *tmp=NULL;
for (i = 0; Input[i] != '\0'; i++)
{
switch (Stat)
{
case 0: break;
case 1:
if (strchr(number, Input[i]) != 0)
{
Stat=4;
break;
}
else
if (strchr(liter, Input[i]) != 0)
{
tmp[j++] = Input[i];
Stat=3;
break;
}
else
if (strchr(" ", Input[i]) != 0)
{
break;
}
else
if (strchr(znak, Input[i]) != 0)
{
Result(1);
return;
}
else
if (strchr("(", Input[i]) != 0)
{
Vloj++;
break;
}
else
if (strchr(")", Input[i]) != 0)
{
Result(2);
return;
}
else
if (strchr(".", Input[i]) != 0)
{
Stat = 5;
break;
}
else
{
Result(3, &Input[i]);
return;
}
case 2:
if (strchr(number, Input[i]) != 0)
{
Result(4);
return;
}
else
if (strchr(liter, Input[i]) != 0)
{
Result(4);
return;
}
else
if (strchr(" ", Input[i]) != 0)
{
break;
}
else
if (strchr(znak, Input[i]) != 0)
{
Stat = 1;
break;
}
else
if (strchr("(", Input[i]) != 0)
{
Result(4);
return;
}
else
if (strchr(")", Input[i]) != 0)
{
Vloj--;
break;
}
else
if (strchr(".", Input[i]) != 0)
{
Result(3);
break;
}
else
{
Result(3, &Input[i]);
return;
}
case 3:
if (strchr(number, Input[i]) != 0)
{
tmp[j++] = Input[i];
break;
}
else
if (strchr(liter, Input[i]) != 0)
{
tmp[j++] = Input[i];
break;
}
else
if (strchr(" ", Input[i]) != 0)
{
//tmp[j++]='\0';
if (strstr(func,tmp) != 0)
{
Stat = 6;
}
else
{
Stat = 2;
}
*tmp=NULL;
j=0;
break;
}
else
if (strchr(znak, Input[i]) != 0)
{
tmp[j++]='\0';
if (strstr(func,tmp) != 0)
{
Result(5, tmp);
return;
}
else
{
Stat = 1;
*tmp=NULL;
j=0;
}
break;
}
else
if (strchr("(", Input[i]) != 0)
{
tmp[j++]='\0';
if (strstr(func,tmp) != 0)
{
Stat = 1;
*tmp=NULL;
j=0;
}
else
{
Result(6, tmp);
return;
}
Vloj++;
break;
}
else
if (strchr(")", Input[i]) != 0)
{
tmp[j++]='\0';
if (strstr(func,tmp) != 0)
{
Result(2);
return;
}
else
{
Stat = 2;
*tmp=NULL;
j=0;
Vloj--;
}
break;
}
else
if (strchr(".", Input[i]) != 0)
{
Result(7, tmp);
return;
}
else
{
Result(3, &Input[i]);
return;
}
case 4:
if (strchr(number, Input[i]) != 0)
{
break;
}
else
if (strchr(liter, Input[i]) != 0)
{
Result(8, tmp);
return;
}
else
if (strchr(" ", Input[i]) != 0)
{
Stat=2;
break;
}
else
if (strchr(znak, Input[i]) != 0)
{
Stat = 1;
break;
}
else
if (strchr("(", Input[i]) != 0)
{
Result(4);
return;
}
else
if (strchr(")", Input[i]) != 0)
{
Stat = 2;
Vloj--;
break;
}
else
if (strchr(".", Input[i]) != 0)
{
Result(3);
break;
}
else
{
Result(3, &Input[i]);
return;
}
case 6:
if (strchr(number, Input[i]) != 0)
{
Result(5, tmp);
return;
}
else
if (strchr(liter, Input[i]) != 0)
{
Result(5, tmp);
return;
}
else
if (strchr(" ", Input[i]) != 0)
{
break;
}
else
if (strchr(znak, Input[i]) != 0)
{
Result(5, tmp);
return;
}
else
if (strchr("(", Input[i]) != 0)
{
Stat = 1;
Vloj++;
break;
}
else
if (strchr("", Input[i]) != 0)
{
Result(2);
return;
}
else
if (strchr(".", Input[i]) != 0)
{
Result(5);
break;
}
else
{
Result(3, &Input[i]);
return;
}
}
}
if (Input[i] == '\0')
{
switch(Stat){
case 1: Result(1); break;
case 2: Result(0); break;
case 3:
tmp[j++]='\0';
if (strstr(func,tmp) != 0)
{
Result(5, tmp);
}
else
Result(0);
break;
case 4: Result(0); break;
case 5: Result(0); break;
case 6: Result(5, tmp); break;
}
}
}
void main()//пример чисто символический,потмоу чт все равно проект не проходит даже сборку
{
Analiz m1;
m1.Input="x+1/2";
printf("/n %s /n",m1.Output);
}
В отладчике выдается 2 ошибки:
1.error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup MSVCRTD.lib
2.fatal error LNK1120: 1 unresolved externals
Что делать ума не приложу.