Построение формального языка L
//----------------------------------------------------------------------------
// Сканирует до появления While
//----------------------------------------------------------------------------
int scan()
{
int k,j,w; //счетчики
mistake_number[1]=1;
for(j=0;;j++)
{
if(TEXT[x][j] == NULL) break;
if(TEXT[x][j] == 'W')
{
y=j; //если нашли W или w
if(my_while() == 1) break; //то вызываем
} //my_while
if(TEXT[x][j] == 'w')
{
y=j;
if(my_while() == 1) break;
}
if(TEXT[x][j] != ' ')
{
strange[s++]=TEXT[x][j];
mistake_number[10]=1;
}
if(TEXT[x][j] == ' ')
{
strange[s++]=',';
strange[s++]=' ';
}
}
strange[s]=NULL;
return(1);
}
//----------------------------------------------------------------------------
// Обрабатывает While и вызывает обработку функций
//----------------------------------------------------------------------------
int my_while()
{
char str[10];
int k,j,w; //счетчики
for(w=0;w<5;w++)
{
if(TEXT[x][y] == NULL) break;
str[w]=toupper(TEXT[x][y++]); //Toupper - переводит
} //все буквы в заглавные
str[w]=NULL;
if(strcmp(str,"WHILE") == 0) //Если While найден то производим
{ // дальнейший разбор
fprintf(fl_t,"Найден While проверка началась с символа - %cn",TEXT[x][y]);
if(TEXT[x][y] != '(') mistake_number[2]=1;
else y++;
AB();
if(TEXT[x][y] != ')') mistake_number[3]=1;
y++;
mistake_number[1]=0;
FUNC();
return(1);
}
else return(0);
}
//----------------------------------------------------------------------------
// Обработка выражения
//----------------------------------------------------------------------------
int AB()
{
char signal[4]=">
int z;
fprintf(fl_t,"Проверка на ABn");
TERM();
if(TEXT[x][y] == '<')
{
y++;
if(TEXT[x][y] == '=') y++;
for(z=0;z<4;z++)
if(TEXT[x][y] == signal[z]) //Если слишком
{ //сложная знаковая
mistake_number[14]=1; //конструкция
y++; //то ошибка
z=0;
}
AB();
return(1);
}
if(TEXT[x][y] == '>')
{
y++;
if(TEXT[x][y] == '=') y++;
for(z=0;z<4;z++)
if(TEXT[x][y] == signal[z])
{
mistake_number[14]=1;
y++;
z=0;
}
AB();
return(1);
}
if(TEXT[x][y] == '=')
{
y++;
if(TEXT[x][y] == '=')
{
y++;
}
for(z=0;z<4;z++)
if(TEXT[x][y] == signal[z])
{
mistake_number[14]=1;
y++;
z=0;