curpos=ftell(in);
i++;
}
lex[i]='\0';
fseek(in,curpos,0);
i=find_keyword(lex);//ищем ключ слово, если нашли - возвращаем его положение в массиве
if(i>0)
{
strcpy(out_mas[c],"( ,30)\0");out_mas[c][1]=char(i/10+48); out_mas[c][2]=char(i%10+48);c++;
}
//не нашли ключ слово - проверяем на имя функции:
else
{
curpos=ftell(in);
//sym[n]=fgetc(in);
while(sym[n]=='\n'||sym[n]=='\t'||sym[n]=='\0'||sym[n]==' ')
{
sym[n]=fgetc(in);
}
if(sym[n]=='(')
{
fseek(in,curpos,0);
for (int 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++;
}
}
else {fseek(in,curpos,0);
}
}
}
switch(sym[n])//проверяем символ
{
//проверка на числа:
case '-':
curpos=ftell(in);
tmp=fgetc(in);
if(!isdigit(tmp)&&tmp!='.'){fseek(in,curpos,0);goto def;}
else fseek(in,curpos,0);
case '.':
case '0': case '1': case '2': case '3':
case '4': case '5': case '6':
case '7': case '8': case '9':
KA_number();
break;
/***************************************************************************/
//проверка на разделители:
def:
default:int curpos1;
curpos=ftell(in);//сохранение позиции в файле (тобы вернуться,если прочит след символ-не опер)
for(i=0;i<27;i++)//ищем опер в массиве операторов (сначала поиск только по унарным)
{
if(Operators[i][0]==sym[n]) //если нашли унарный опер
{
temp[0]=Operators[i][0];//то сохран его
sym[n] = fgetc(in); //и читаем след символ для проверки на бинарн опер
temp[1]=sym[n];temp[2]='\0';
y=false;j=i;
for(i=27;i<47;i++)//"===", "!==", ">>=", "<<=" не проверяем
if(strcmp(Operators[i],temp)==0) //если нашли бинарн опер
{
y=true;//есть бин опер
if(i>=29&&i<=32) //если есть "==", "!=", "<<", ">>", то чит еще символ
//для проверки на "===", "!==", ">>=", "<<="
{
curpos=ftell(in);
sym[n] = fgetc(in);
if(sym[n]=='=')
{
temp[2]='=';
temp[3]='\0';
//есть 3-й оператор
strcpy(out_mas[c],"( ,10)\0");out_mas[c][1]=char((i+19)/10+48);out_mas[c][2]=char((i+19)%10+48);c++;
}
else {fseek(in,curpos,0);
strcpy(out_mas[c],"( ,10)\0");out_mas[c][1]=char(i/10+48);out_mas[c][2]=char(i%10+48);c++;
}//нет 3-го оператора
}
else
{ strcpy(out_mas[c],"( ,10)\0");out_mas[c][1]=char(i/10+48);out_mas[c][2]=char(i%10+48);c++;
}
}
if(y==false)
{
y=false;
strcpy(out_mas[c],"( ,10)\0");out_mas[c][1]=char(j/10+48);out_mas[c][2]=char(j%10+48);c++;
fseek(in,curpos,0);
}//нет опер из 2 или 3 симв, значит это унарн опер
}
}
break;
/*************************************************************************/
case '\n':
case '\t':
case '\0':
case ' ':
break;
/************************************************************************/
//обработка строк:
case '\"':i=0;j=0;
strcpy(out_mas[c],"( ,10)\0");out_mas[c][1]=char(50); c++;
sym[n]=fgetc(in);
while (sym[n]!='\"')
{tmp=sym[n];
Strings[str_num][i]=sym[n];
if(sym[n]=='$')
{
sym[n]=fgetc(in);i++;
curpos=ftell(in);
if (isdigit(sym[n])) break;//c цифры наинаться не может
while (isalpha(sym[n])|| isdigit(sym[n])||sym[n]=='_' )
{
lex[j]=sym[n];//записываем идентификатор в строку
Strings[str_num][i]=sym[n];i++;
n++;
sym[n]=fgetc(in);
j++;
curpos=ftell(in);
}
fseek(in,curpos-1,0);i-=1;
lex[j]='\0';
for (int k=0;k<50;k++)
{
if ( strcmp(ident[k],lex) == 0)
{
j=555;//если есть ид-р в табл, то выводим его положение
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.