Синтаксический анализатор. Написание синтаксического анализатора для языка ADA на любом доступном языке программирования., страница 4

int constj=0;

char xxx[10];

ifstream file1;

file1.open(filename);

while(!file1.getline(xxx,sizeof(xxx)).eof())

{

if(!stricmp(temp,xxx))

{

consti=1;/*MessageBox(NULL,"Повтор", не ноль "Help",MB_OK);*/

break;

}

constj++;

}

file1.close();

if(!consti)

{

ofstream file;

file.open(filename,ios::out|ios::app);

file<<temp<<endl;

file.close();

char  buf[20];

if(!stricmp(b,"(30,"))

{

sprintf(buf,"%i %s",constj,temp);

Form1->ListBox4->Items->Add(buf);

sprintf(ident[id],"%s",temp);

id++;

}

else

{

sprintf(buf,"%i %s",constj,temp);

Form1->ListBox5->Items->Add(buf);

sprintf(con[co],"%s",temp);

co++;

}

}

char  bufc[10];

sprintf(bufc,"%s%i)",b,constj);

Form1->ListBox1->Items->Add(bufc);

int bbb;

if(!stricmp(b,"(30,")) bbb=30;

else bbb=40;

que[ique].i=bbb;

que[ique].j=constj;

ique++;

}

void printznak(char s)//в очередь помещает разделители

{

for(int i=0;i<16;i++)

if(s==zna[i])

{

char buf[10];

sprintf(buf,"(20,%i)",i);

Form1->ListBox1->Items->Add(buf);

que[ique].i=20;

que[ique].j=i;

ique++;

//delete []buf;

}

}

int typ(char s)//символ - это буква, цифра, разделитель или пробел

{

int i;

for(i=0;i<52;i++) if(s==letter[i]) return  bukva;

for(i=0;i<10;i++) if(s==number[i]) return  cifra;

for(i=0;i<14;i++) if(s==zna[i]) return  znak;

if (s==zna[14]) return pod;

if (s==zna[15]) return tck;

if(s==' ')return probel;

return 0;

}

void ident_cif_oper(char temp[])

{

int i,j;

for(i=0;i<33;i++)

if(!stricmp(temp,opername[i].name))//выделяем ключевые слова

{

char buf[10];

sprintf(buf,"(10,%i)",opername[i].nmb);

Form1->ListBox1->Items->Add(buf);

que[ique].i=10;

que[ique].j=opername[i].nmb;

ique++;

//break;

// delete []buf;

// MessageBox(NULL,"oper", "Help",MB_OK);

return;                       

}

j=strlen(temp);

for(i=0;i<j;i++)if(typ(temp[i])==bukva||typ(temp[i])==znak)break;

if(i==j)

{

char filename[13]="Const.txt";

fileprint(temp,filename,"(40,");

//MessageBox(NULL,"const", "Help",MB_OK);

return;

}

char filename2[13]="Ident.txt";

fileprint(temp,filename2,"(30,");

//MessageBox(NULL,"ident", "Help",MB_OK);

return;

}

int comment(char zxz[])       //удаление комментариев

{

int i;

for (i=0;i<strlen(zxz);i++)

if (zxz[i]==zna[1]&&zxz[i+1]==zna[1])

return 1;

return 0;

}

void prov(char zxz[])

{

int skip=0;

char n,*temp;

int j=0;

temp=new char[strlen(zxz)];

for(int i=0;i<strlen(zxz);i++)

{

if (skip>0)

{

skip--;

goto met1;

}

/////////////////////////////////////////////////////////////////

if (zxz[i]==zna[15]&&zxz[i+1]==zna[15])                    //  ..

{                                                      //

if (exist)

{

*(temp+j)='\0';                        //

j=0;

ident_cif_oper(temp);                  //

}

*(temp)=zxz[i];                                //

*(temp+1)=zxz[i+1];                            //

*(temp+2)='\0';                                //

skip=1;                                        //

que[ique].i=20;

que[ique].j=16;

ique++;

Form1->ListBox1->Items->Add("(20,16)");        //

goto met1;                                     //

}

if (zxz[i]==zna[2]&&zxz[i+1]==zna[2])                      //  **

{

if (exist)

{

*(temp+j)='\0';                        //

j=0;

ident_cif_oper(temp);                  //

}

*(temp)=zxz[i];

*(temp+1)=zxz[i+1];

*(temp+2)='\0';

skip=1;

que[ique].i=20;

que[ique].j=17;

ique++;

Form1->ListBox1->Items->Add("(20,17)");

goto met1;

}

if (zxz[i]==zna[13]&&zxz[i+1]==zna[9])                     // /=

{

if (exist)

{

*(temp+j)='\0';                                //