"% s n", string);
do
{
tmp [0] = NULL;
j = 0;
while (! isspace (string [k + +]) && String [k-1]! = NULL)
{
tmp [j + +] = string [k-1];
}
tmp [j] = NULL;
if ((strcmp (tmp, "GOTO") ! = 0) &&! Isdigit (tmp [0]))
{
# ifdef TEST
cprintf ("Не визначений ідентифікатор% s. r n ", tmp);
# endif
ERR1 = a;
ERR2 = i;
i + +;
Error (5, tmp);
}
else if (! isdigit (tmp [0]))
{
label = YES;
ERR1 = a;
ERR2 = i;
pos = k;
while (AB ()! = OK);
break;
}
}
while (string [k] ! = NULL);
if (label == NO)
{
# ifdef TEST
cprintf ("Не знайдений оператор GOTO. r nСтрока розбору не підлягає. r n ");
# endif
Error (6);
}
a + +;
return (OK);
}
// Видалення у рядку пробілів.
void Delspace (char * string)
{
char str [STR_LEN];
int j = 0;
int i = 0;
while (isspace (string [i]) && String [i]! = NULL)
i + +;
for (; string [i] ! = NULL; i + +)
{
if (islower (string [i]))
string [i] = toupper (string [i]);
str [j + +] = string [i];
}
str [j] = NULL;
sprintf (string, "% s", str);
string [j-1] = NULL;
# ifdef TEST
textattr (30);
clreol ();
cputs (string);
textattr (78);
cputs (" r n");
# endif
}
// Реалізація нетермінала <Арифметичне Вираз>.
int AB (void)
{
# ifdef TEST
cprintf ("AB - Перевірка на Арифметичне Вираз. R n ");
# endif
fprintf (errors, "AB - Перевірка на Арифметичне Вираз. N ");
Scan ();
T ();
if (nx == '+')
{
AB ();
}
else if (nx == '-')
{
AB ();
}
if (nx == NULL)
return (OK);
else if (nx! = '*' && nx! = '/' && nx! = ')')
Error (1);
return (YES);
}
// Реалізація нетермінала <Терм>.
int T (void)
{
# ifdef TEST
cprintf ("T - Перевірка на Терм. R n ");
# endif
fprintf (errors, "T - Перевірка на Терм. N ");
O ();
if (nx == '/')
{
Scan ();
T ();
}
else if (nx == '*')
{
Scan ();
if (nx == '*')
{
Scan ();
T ();
}
else T ();
}
if (nx == NULL)
return (OK);
else if (nx! = '+' && nx! = '-' && nx! = ')')
Error (2);
return (OK);
}
// Реалізація нетермінала ...