strcpy(out_mas[c],"( ,20)\0");out_mas[c][1]=char(k/10+48);out_mas[c][2]=char(k%10+48);c++;
}
}
//если нет ид-ра в табл, то запоминаем его и выводим его положение
if(j!=555)
{
strcpy(ident[c_id],lex);
strcpy(out_mas[c],"( ,20)\0");out_mas[c][1]=char(c_id/10+48);out_mas[c][2]=char(c_id%10+48);c++;
c_id++;
}
}
sym[n]=fgetc(in);
i++;
}
int k;
for (k=0;k<50;k++)
{
if ( strcmp(strings[k],Strings[str_num]) == 0)
{
j=555;//если есть строка в табл, то выводим ее положение
strcpy(out_mas[c],"( ,50)\0");out_mas[c][1]=char(k/10+48);out_mas[c][2]=char(k%10+48);c++;
}
}
//если нет строки в табл, то запоминаем ее и выводим ее положение
if(j!=555)
{
strcpy(strings[c_str],Strings[str_num]);
strcpy(out_mas[c],"( ,50)\0");out_mas[c][1]=char(c_str/10+48);out_mas[c][2]=char(c_str%10+48);c++;
c_str++;
}
str_num++;
strcpy(out_mas[c],"( ,10)\0");out_mas[c][1]=char(50); c++; //вывод описателя оператора в файл
break;
case '\'':i=0;
strcpy(out_mas[c],"( ,10)\0");out_mas[c][1]=char(51); c++;
sym[n]=fgetc(in);
while (sym[n]!='\'')
{
Strings[str_num][i]=sym[n];
sym[n]=fgetc(in);
i++;
}
if(find_keyword(Strings[str_num])>0) {str_num--;}
strcpy(out_mas[c],"( ,10)\0");out_mas[c][1]=char(51); c++;
for (k=0;k<50;k++)
{
if ( strcmp(strings[k],Strings[str_num]) == 0)
{
j=555;//если есть строка в табл, то выводим ее положение
strcpy(out_mas[c],"( ,50)\0");out_mas[c][1]=char(k/10+48);out_mas[c][2]=char(k%10+48);c++;
}
}
//если нет строки в табл, то запоминаем ее и выводим ее положение
if(j!=555)
{
strcpy(strings[c_str],Strings[str_num]);
strcpy(out_mas[c],"( ,50)\0");out_mas[c][1]=char(c_str/10+48);out_mas[c][2]=char(c_str%10+48);c++;
c_str++;
}
str_num++;
break;
/***********************************************************************/
//убираем комментарии:
case '#':
while (sym[n]!='\n')
{
sym[n]=fgetc(in);
}
break;
case '/':
curpos=ftell(in);
i=0;n++;
sym[n]=fgetc(in);
if (sym[n]=='/')
{n--;
while (sym[n]!='\n')
{
sym[n]=fgetc(in);
}
break;
}
else if (sym[n]=='*')
{n--;
sym[n]=fgetc(in);
cycle: while (sym[n]!='*')
{
sym[n]=fgetc(in);
}
sym[n]=fgetc(in);
if(sym[n]=='/'){n--;
break;}
else goto cycle;
break;
}
else
if (sym[n]=='=')
{
strcpy(out_mas[c],"( ,10)\0");out_mas[c][1]=char(43+48); c++;
}
else
{
fseek(in,curpos,0);
strcpy(out_mas[c],"( ,10)\0");out_mas[c][1]=char(18+48); c++;
}
break;
/***********************************************************************/
//провера на идентификаторы
case '$':
i=0;
sym[n]=fgetc(in);
curpos=ftell(in);
if (isdigit(sym[n])) {
break;}//c цифры наинаться не может
while (isalpha(sym[n])|| isdigit(sym[n])||sym[n]=='_' )
{
lex[i]=sym[n];//записываем идентификатор в строку
n++;
sym[n]=fgetc(in);
i++;
curpos=ftell(in);
}
fseek(in,curpos-1,0);
lex[i]='\0';//стр заканчивается \0
for (k=0;k<50;k++)
{
if ( strcmp(ident[k],lex) == 0)
{
i=555;//если есть ид-р в табл, то выводим его положение
strcpy(out_mas[c],"( ,20)\0");out_mas[c][1]=char(k/10+48);out_mas[c][2]=char(k%10+48);c++;
}
}
//если нет ид-ра в табл, то запоминаем его и выводим его положение
if(i!=555)
{
strcpy(ident[c_id],lex);
strcpy(out_mas[c],"( ,20)\0");out_mas[c][1]=char(c_id/10+48);out_mas[c][2]=char(c_id%10+48);c++;
c_id++;
}
break;
}//switch конец
n++;
}
/**************************************************************************/
//вывод результата:
int k;
for ( k=0;k<c;k++)
{
fprintf( nnn,"%s\t",out_mas[k]);
}
fprintf(nnn,"\n Таблица идентификаторов:\n");
for ( k=0;k<c_id;k++)
{
fprintf( nnn,"%d\t",k);
fprintf( nnn,"%s\n",ident[k]);
}
fprintf(nnn,"\n Таблица операторов:\n");
for ( k=0;k<52;k++)
{
fprintf( nnn,"%d\t",k);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.