Смекни!
smekni.com

Построение формального языка L (стр. 4 из 4)

}

//----------------------------------------------------------------------------

// Обработка идентификатора

//----------------------------------------------------------------------------

int IDENT()

{

fprintf(fl_t,"Проверка на IDENT, текущий символ - %c\n",TEXT[x][y]);

if((isalpha(TEXT[x][y])) != NULL)

{

while(isalpha(TEXT[x][y]) || isdigit(TEXT[x][y]))

y++;

return(1);

}

else return(0);

}

//----------------------------------------------------------------------------

// Целое без знака

//----------------------------------------------------------------------------

int ZBZ()

{

fprintf(fl_t,"Проверка на ЦБЗ, текущий символ - %c\n",TEXT[x][y]);

if((isdigit(TEXT[x][y])) != NULL)

{

y++;

while(1)

{

if((isalpha(TEXT[x][y])) != NULL)

{

/*Если найден идентификатор,*/ if(f==0) mistake_number[12]=1;

/*начинающийся с цифры, */ else mistake_number[9]=1;

/*то ошибка: */ while(isalpha(TEXT[x][y]) || isdigit(TEXT[x][y]))

/*если f=0 то в идентификаторе*/ y++;

/*если f=1 то в параметре */ return(1);

/* функции */ }

if((isdigit(TEXT[x][y])) == NULL) break;

y++;

}

return(1);

}

else return(0);

}

//----------------------------------------------------------------------------

// Обработка функции

//----------------------------------------------------------------------------

int FUNC()

{

f=1;

fprintf(fl_t,"Проверка на FUNC, текущий символ - %c\n",TEXT[x][y]);

for(;;y++)

if(TEXT[x][y] != ' ') break;

if(IDENT()==0)

{

mistake_number[6]=1;

while(isalpha(TEXT[x][y]) || isdigit(TEXT[x][y]))

y++;

}

if(mistake_number[6] ==0)

if(TEXT[x][y] =='(')

{

y++;

if(TEXT[x][y] == ')')

{

mistake_number[4]=1;

y++;

}

else while(6)

{

if(PAR() != 0)

{

if(TEXT[x][y] == ')')

{

y++;

break;

}

if(TEXT[x][y] == ';') break;

if(TEXT[x][y] == ',') y++;

}

else

{

mistake_number[13]=1;

break;

}

}

}

else

{

mistake_number[2]=1;

mistake_number[13]=1;

}

if(mistake_number[13]==1)

{

for(;;y++)

{

if(TEXT[x][y] == NULL)

{

mistake_number[5]=1;

mistake_number[3]=1;

break;

}

if(TEXT[x][y] == ';')

{

mistake_number[3]=1;

break;

}

if(TEXT[x][y] == ')')

{

y++;

break;

}

}

}

if(TEXT[x][y] != ';') mistake_number[5]=1;

return(1);

}

//----------------------------------------------------------------------------

// Обработка параметров функции

//----------------------------------------------------------------------------

int PAR()

{

fprintf(fl_t,"Проверка на PAR, текущий символ - %c\n",TEXT[x][y]);

if(IDENT() == 0)

if(ZBZ() == 0)

{

mistake_number[13]=1;

return(0);

}

return(1);

}

Список литературы:

1. Д. Грис Конструирование компиляторов для цифровых вычислительных машин. М., Мир, 1975.

2. Лебедев В.Н. Введение в системы программирования. М., «Статистика», 1975.

3. Шорников Ю.В., Шегал Б.Р. Методическое пособие для выполнения курсовой работы по системному программированию. Новосибирск, 1992.