Нашел для себя программку синтаксического восходящего анализатора, решил скомпилить код и запустить, посмотреть как работает программа. Однако, код не компилится, думаю из-за того, что написана она давно, и что-то с библиотеками или компиляторами, компилил под g++ (linux, windows). Знание плюсов - нулевые. Вот код:
#include <iostream.h>
#include <conio.h>
#include <string.h>
const n=1000;
char* s=new char [256];
char* wstack=new char[n];
unsigned char* rstack=new unsigned char[n];
unsigned int rp, wp;
char smb [17]={'V', 'W', 'F', 'H', 'P', 'C', '+', '-',
'*', 'd', 'm', '(', ')', 'i', 'b', 'n', '$'};
char *rulez [14]={"VW", "WF", "WW+F", "WW-F", "FH", "HP", "HH*P",
"HHdP", "HHmP", "P(V)", "Pi", "PC", "Cn", "Cb"};
char tbl [17][17]=
{{-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2, 0,-2,-2,-2, 1},
{-2,-2,-2,-2,-2,-2, 0, 0,-2,-2,-2,-2, 1,-2,-2,-2, 1},
{-2,-2,-2,-2,-2,-2, 1, 1,-2,-2,-2,-2, 1,-2,-2,-2, 1},
{-2,-2,-2,-2,-2,-2, 1, 1, 0, 0, 0,-2, 1,-2,-2,-2, 1},
{-2,-2,-2,-2,-2,-2, 1, 1, 1, 1, 1,-2, 1,-2,-2,-2, 1},
{-2,-2,-2,-2,-2,-2, 1, 1, 1, 1, 1,-2, 1,-2,-2,-2, 1},
{-2,-2, 0,-1,-1,-1,-2,-2,-2,-2,-2,-1,-2,-1,-1,-1,-2},
{-2,-2, 0,-1,-1,-1,-2,-2,-2,-2,-2,-1,-2,-1,-1,-1,-2},
{-2,-2,-2,-2, 0,-1,-2,-2,-2,-2,-2,-1,-2,-1,-1,-1,-2},
{-2,-2,-2,-2, 0,-1,-2,-2,-2,-2,-2,-1,-2,-1,-1,-1,-2},
{-2,-2,-2,-2, 0,-1,-2,-2,-2,-2,-2,-1,-2,-1,-1,-1,-2},
{ 0,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-1,-2,-1,-1,-1,-2},
{-2,-2,-2,-2,-2,-2, 1, 1, 1, 1, 1,-2, 1,-2,-2,-2, 1},
{-2,-2,-2,-2,-2,-2, 1, 1, 1, 1, 1,-2, 1,-2,-2,-2, 1},
{-2,-2,-2,-2,-2,-2, 1, 1, 1, 1, 1,-2, 1,-2,-2,-2, 1},
{-2,-2,-2,-2,-2,-2, 1, 1, 1, 1, 1,-2, 1,-2,-2,-2, 1},
{ 2,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-1,-2,-1,-1,-1,-2}};
char right(char* s);
void main()
{char key;
int i, r;
clrscr();
key=13;
while (!(key==27))
{s=new char [60];
cout<<"Input a string"<<endl;
cin>>s;
r=int(right(s));
cout<<"Rezult: "<<r<<endl;
if (r) for (i=0; i<rp; i+=2)
{cout<<rstack[i]<<" "<<int(rstack[i+1])<<" | ";}
key=getch();
clrscr();}
delete(wstack);
delete(rstack);
};
int decode(char c)// поиск кода для символа
{for (int i=0; i<17; i++)
if (smb[i]==c) return i;
return -1;}
char right(char* s) //анализатор
{int i, j;
rp=wp=0;
int priorrl=0, cp=0;
char *priorr=new char [256];
char *buf=new char [256];
wstack[wp]='$'; wstack[wp+1]=1;
while (1) {
if (strlen(s)>0 && decode(s[0])==-1) return 0;
if (strlen(s)>0) cp=tbl[decode(wstack[wp])][decode(s[0])];
else cp=tbl[decode(wstack[wp])][decode('$')];
switch (cp)
{
case -2:return 0;
case -1:;
case 2:;
case 0:{wp+=2;
wstack[wp]=s[0]; wstack[wp+1]=cp;
rstack[rp]=s[0]; rstack[rp+1]=0;
rp+=2;
s=strcpy(s, s+1);
for(i=rp-3; i>0, priorrl>0; i-=2)
if (!rstack[i]) {rstack[i]=(rp-2)/2; priorrl--;}
if (cp==2) return 1;
break;};
case 1:{priorr=strcpy(priorr, '\0');
while (wstack[wp+1]<=0)
{strcpy(buf, priorr);
priorr=strcpy(priorr+1, buf)-1;
priorr[0]=wstack[wp];
wp-=2;
if (wstack[wp+3]<0) break;};
priorrl=strlen(priorr);
for (i=0; i<14; i++)
if (!strcmp(rulez[i]+1, priorr))
{strcpy(buf, s);
s=strcpy(s+1, buf)-1;
s[0]=rulez[i][0];
break;}
break;};
};};};
Просьба будет такая, что мне нужно исправить, чтобы оно работало для нормального компилятора или помогите найти старые версии оного и библиотек.