case 21: z[z1]=7;v++;
printf("\tЗаменить(C1)\tСдвиг\n");vl[j]=21;break;
case 22: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=22;break;
case 23: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=23;break;
case 24: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=24;break;
case 25: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=25;break;
case 26: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=26;break;
case 27: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=27;break;
case 28: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=28;break;
case 29: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=29;break;
case 30: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=30;break;
case 31: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=31;break;
case 32: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=32;break;
case 33: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=33;break;
case 34: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=34;break;
case 35: z[z1]=4;z1++;z[z1]=1;v++;
printf("\tЗаменить(В3,В)\tСдвиг\n");vl[j]=35;break;
case 36: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=36;break;
case 37: z1--;
printf("\tВытолкнуть\tДержать\n");vl[j]=37;break;
case 38: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=38;break;
case 39: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=39;break;
case 40: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=40;break;
case 41: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=41;break;
case 42: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=42;break;
case 43: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=43;break;
case 44: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=44;break;
case 45: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=45;break;
case 46: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=46;break;
case 47: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=47;break;
case 48: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=48;break;
case 49: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=49;break;
case 50: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=50;break;
case 51: z[z1]=4;z1++;z[z1]=1;v++;
printf("\tЗаменить(В3,В)\tСдвиг\n");vl[j]=51;break;
case 52: z[z1]=5;z1++;z[z1]=1;v++;
printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=52;break;
case 53: z1--;
printf("\tВытолкнуть\tДержать\n");vl[j]=53;break;
case 54: z[z1]=9;z1++;z[z1]=2;v++;
printf("\tЗаменить(S',В1)\tСдвиг\n");vl[j]=54;break;
case 55: z[z1]=9;z1++;z[z1]=3;v++;
printf("\tЗаменить(S',В2)\tСдвиг\n");vl[j]=55;break;
case 56: z[z1]=9;z1++;z[z1]=7;v++;
printf("\tЗаменить(S',C1)\tСдвиг\n");vl[j]=56;break;
case 57: z[z1]=9;z1++;z[z1]=7;v++;
printf("\tЗаменить(S',C1)\tСдвиг\n");vl[j]=57;break;
case 58: z[z1]=0;v++;
printf("\tЗаменить(S)\tСдвиг\n");vl[j]=58;break;
case 59: z1--;
printf("\tВытолкнуть\tДержать\n");vl[j]=59;break;
case 60: printf("ДОПУСТИТЬ\n");i=1;vl[j]=60;break;
case 0: printf("Отвергнуть\n");i=2;vl[j]=0;break;
}
if(i==1|i==2)break;else j++;
}
while(tab[z[z1]][a[v]]!=0||tab[z[z1]][a[v]]!=60);
printf("Выходная лента:\n");
for(k=0;k<=j;k++)
{
printf("%d ",vl[k]);
}
return i;
};
/*-------------------------------------------------------------------------*/
/*--------------------------ТЕРМИНАЛЬНЫЕ СИМВОЛЫ---------------------------*/
int termin(char s)
{
char term[t]={'+','-','&','|','>','<','=','\n','!','/','*',':','?','%','(',')',','};
int k,di=0;
for(k=0;k<=t-1;k++)
{
if(s==term[k]||s=='d'||s=='i'||s=='v'||s=='m'||s=='o'||s=='r'||s=='a'||s=='n')
{di=1;break;}
}
return di;
};
/*---------------------КОНЕЦ ТЕРМИНАЛЬНЫЕ СИМВОЛЫ--------------------------*/
/*-----------------------ДЕСКРИПТОРНЫЙ ТЕКСТ---------------------------------*/
int lexica()
{ int di(0),q(0),w(0),i1,i;
i=0;
printf("Дескрипторный текст:\n");
do
{
di=termin(s1[i]);
if(di==1)
{
switch(s1[i])
{
case '(': a[w]=0;break;
case ')': a[w]=1;break;
case '%': if(s1[i+1]=='='){a[w]=27;i++;}else a[w]=6;break;
case '*': if(s1[i+1]=='='){a[w]=23;i++;}else a[w]=7;break;
case '/': if(s1[i+1]=='='){a[w]=26;i++;}else a[w]=8;break;
case '=': if(s1[i+1]=='='){a[w]=16;i++;}else a[w]=22;break;
case '!': if(s1[i+1]=='=')a[w]=15;i++;break;
case '>': if(s1[i+1]=='='){a[w]=13;i++;}else a[w]=12;break;
case '<': if(s1[i+1]=='='){a[w]=14;i++;}else a[w]=11;break;
case '+': if(s1[i+1]=='+'){a[w]=4;i++;}else if(s1[i+1]=='='){a[w]=24;i++;}else a[w]=9;break;
case '-': if(s1[i+1]=='-'){a[w]=5;i++;}else if(s1[i+1]=='='){a[w]=25;i++;}else a[w]=10;break;
case '&': if(s1[i+1]=='&')a[w]=18;i++;break;
case '|': if(s1[i+1]=='|')a[w]=17;i++;break;
case ',': a[w]=21;break;
case '?': a[w]=19;break;
case ':': a[w]=20;break;
}
i++;
}
else
{
i1=i;
while(di!=1)
{
i++;
di=termin(s1[i]);
}
q=perem(i1,i-1);
if(q==1)a[w]=2;else {printf("ERROR.\nЛЕКСИЧЕСКАЯ ОШИБКА");break;}
}
printf("%d ",a[w]);
w++;
}
while(s1[i]!='\n');
a[w]=28;
};
/*---------------------КОНЕЦ ДЕСКРИПТОРНОГО ТЕКСТА--------------------------*/
int lexica1()
{ int di(0),q(0),w(0),i1,i;
i=0;
printf("Дескрипторный текст:\n");
do
{
di=termin(s1[i]);
if(di==1)
{
switch(s1[i])
{
case '(': a[w]=0;break;
case ')': a[w]=1;break;
case '*': a[w]=6;break;
case '/': a[w]=7;break;
case '=': a[w]=11;break;
case '>': if(s1[i+1]=='='){a[w]=15;i++;}else a[w]=14;break;
case '<': if(s1[i+1]=='='){a[w]=16;i++;}else a[w]=13;break;
case '+': a[w]=4;break;
case '-': a[w]=5;break;
case ',': a[w]=3;break;
case 'd': if(s1[i+1]=='i'&&s1[i+2]=='v')a[w]=8;i++;i++;break;
case 'm': if(s1[i+1]=='o'&&s1[i+2]=='d')a[w]=9;i++;i++;break;
case 'a': if(s1[i+1]=='n'&&s1[i+2]=='d')a[w]=10;i++;i++;break;
case 'o': if(s1[i+1]=='r')a[w]=17;i++;break;
}
i++;
}
else
{
i1=i;
while(di!=1)
{
i++;
di=termin(s1[i]);
}
q=perem(i1,i-1);
if(q==1)a[w]=2;else
{printf("ERROR.\nЛЕКСИЧЕСКАЯ ОШИБКА");break;}
}
printf("%d ",a[w]);
w++;
}
while(s1[i]!='\n');
a[w]=18;
};
int analiz1()
{
int z[10],v,z1,i(0),j,k;
int tab[12][19]={{36,0,35,0,33,34,0,0,0,0,0,0,0,0,0,0,0,0,0},
{4,0,3,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,11,0,11,0,0,0,0,0,0,0,5,8,6,7,9,10,0,11},
{26,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,32,0,32,32,32,27,28,29,30,31,32,32,32,32,32,32,32,32},
{21,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{22,23,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23},
{0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{15,0,14,0,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,19,0,19,16,17,0,0,0,0,0,19,19,19,19,19,19,18,19},
{0,38,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39}};
printf("\n");
z1=0;
z[z1]=11;z1++;z[z1]=1;
v=0;j=0;
do
{
switch(tab[z[z1]][a[v]])
{
case 1: z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=3;v++;
printf("\tЗаменить(В'П'C)\tСдвиг\n");vl[j]=1;break;
case 2: z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=3;v++;
printf("\tЗаменить(В'П'C)\tСдвиг\n");vl[j]=2;break;
case 3: z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=6;v++;
printf("\tЗаменить(В'П'C'M')\tСдвиг\n");vl[j]=3;break;
case 4: z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=7;z1++;z[z1]=1;v++;
printf("\tЗаменить(В'П'C'M1,B)\tСдвиг\n");vl[j]=4;break;
case 5: z[z1]=8;v++;
printf("\tЗаменить(П)\tСдвиг\n");vl[j]=5;break;
case 6: z[z1]=8;v++;
printf("\tЗаменить(П)\tСдвиг\n");vl[j]=6;break;
case 7: z[z1]=8;v++;
printf("\tЗаменить(П)\tСдвиг\n");vl[j]=7;break;
case 8: z[z1]=8;v++;
printf("\tЗаменить(П)\tСдвиг\n");vl[j]=8;break;
case 9: z[z1]=8;v++;
printf("\tЗаменить(П)\tСдвиг\n");vl[j]=9;break;
case 10:z[z1]=8;v++;
printf("\tЗаменить(П)\tСдвиг\n");vl[j]=10;break;
case 11:z1--;
printf("\tВытолкнуть\tДержать\n");vl[j]=11;break;
case 12:z[z1]=9;z1++;z[z1]=3;v++;
printf("\tЗаменить(П'C)\tСдвиг\n");vl[j]=12;break;
case 13:z[z1]=9;z1++;z[z1]=3;v++;
printf("\tЗаменить(П'C)\tСдвиг\n");vl[j]=13;break;
case 14:z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=6;v++;
printf("\tЗаменить(П'C'M')\tСдвиг\n");vl[j]=14;break;
case 15:z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=7;v++;
printf("\tЗаменить(П'C'M1,B)\tСдвиг\n");vl[j]=15;break;
case 16:z[z1]=9;z1++;z[z1]=3;v++;
printf("\tЗаменить(П'C)\tСдвиг\n");vl[j]=16;break;
case 17:z[z1]=9;z1++;z[z1]=3;v++;
printf("\tЗаменить(П'C)\tСдвиг\n");vl[j]=17;break;
case 18:z[z1]=9;z1++;z[z1]=3;v++;
printf("\tЗаменить(П'C)\tСдвиг\n");vl[j]=18;break;
case 19:z1--;
printf("\tВытолкнуть\tДержать\n");vl[j]=19;break;
case 20:z[z1]=6;v++;
printf("\tЗаменить(M')\tСдвиг\n");vl[j]=20;break;
case 21:z[z1]=7;z1++;z[z1]=1;v++;
printf("\tЗаменить(M1,B)\tСдвиг\n");vl[j]=21;break;
case 22:z[z1]=7;z1++;z[z1]=0;v++;
printf("\tЗаменить(M1,S)\tСдвиг\n");vl[j]=22;break;
case 23:z1--;
printf("\tВытолкнуть\tДержать\n");vl[j]=23;break;
case 24:z1--;v++;
printf("\tВытолкнуть\tСдвиг\n");vl[j]=24;break;
case 25:z[z1]=4;z1++;z[z1]=6;v++;
printf("\tЗаменить(C'M')\tСдвиг\n");vl[j]=25;break;
case 26:z[z1]=4;z1++;z[z1]=6;z1++;z[z1]=1;v++;
printf("\tЗаменить(C'M'B)\tСдвиг\n");vl[j]=26;break;
case 27:z[z1]=4;z1++;z[z1]=6;v++;
printf("\tЗаменить(C'M')\tСдвиг\n");vl[j]=27;break;
case 28:z[z1]=4;z1++;z[z1]=6;v++;
printf("\tЗаменить(C'M')\tСдвиг\n");vl[j]=28;break;
case 29:z[z1]=4;z1++;z[z1]=5;v++;
printf("\tЗаменить(C'M)\tСдвиг\n");vl[j]=29;break;
case 30:z[z1]=4;z1++;z[z1]=5;v++;
printf("\tЗаменить(C'M)\tСдвиг\n");vl[j]=30;break;
case 31:z[z1]=4;z1++;z[z1]=5;v++;
printf("\tЗаменить(C'M)\tСдвиг\n");vl[j]=31;break;
case 32:z1--;
printf("\tВытолкнуть\tДержать\n");vl[j]=32;break;
case 33:z[z1]=10;z1++;z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=3;v++;
printf("\tЗаменить(S'B'П'С)\tСдвиг\n");vl[j]=33;break;
case 34:z[z1]=10;z1++;z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=3;v++;
printf("\tЗаменить(S'B'П'С)\tСдвиг\n");vl[j]=34;break;
case 35:z[z1]=10;z1++;z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=6;v++;
printf("\tЗаменить(S'B'П'С'M')\tСдвиг\n");vl[j]=35;break;
case 36:z[z1]=2;z1++;z[z1]=9;z1++;z[z1]=4;z1++;z[z1]=7;z1++;z[z1]=1;v++;
printf("\tЗаменить(B'П'С'M1,B)\tСдвиг\n");vl[j]=36;break;
case 37:z[z1]=0;v++;
printf("\tЗаменить(S)\tСдвиг\n");vl[j]=37;break;
case 38:z1--;
printf("\tВытолкнуть\tДержать\n");vl[j]=38;break;
case 39: printf("ДОПУСТИТЬ\n");i=1;vl[j]=39;break;
case 0: printf("Отвергнуть\n");i=2;vl[j]=0;break;
}
if(i==1|i==2)break;else j++;
}
while(tab[z[z1]][a[v]]!=0||tab[z[z1]][a[v]]!=39);
printf("Выходная лента:\n");
for(k=0;k<=j;k++)
{
printf("%d ",vl[k]);
}
return i;
};
/*--------------------------УДАЛЕНИЕ ПРОБЕЛОВ---------------------------------------*/
/*int probel()
{
int i(0),k(0);
for(i=0;i<=j-1;i++)
{
if(s[i]!=' '){s1[k]=s[i];k++;}
}
j=k;
};*/
/*-------------------------------------------------------------------------*/
int main()
{
int w,i;
clrscr();
//probel();
y=vvod();
w=0;
a[w]=0;
if(y==1)
{lexica();
i=analiz();}
if(y==2)
{
lexica1();
i=analiz1();
}
getch();
return 0;
}