cur_str++;
instr();
}
getch();
window(1,1,80,24);
textbackground(BLACK);
clrscr();
}
/***************************************************************/
/* */
/* Ôóíêöèÿ ñ÷èòûâàíèÿ ñëîâà */
/* */
/***************************************************************/
char* reading()
{
int i=0;
char* temp;
char buf;
temp=(char*)malloc(250);
buf=fgetc(fd);
while(isalpha(buf)) // ñ÷èòûâàåì åñëè òîëüêî áóêâû
{
temp[i]=buf;
i++;
buf=fgetc(fd);
}
ungetc(buf,fd);
temp[i]=NULL;
return(temp);
}
/************************************************************/
/* */
/* Îïåpàòîp */
/* */
/************************************************************/
void instr(void)
{
int i;
char* temp;
del_space(); // óáèpàåì ïpîáåëû
sc(); // áåpåì ñëåäóþùèé ñèìâîë
if(next==EOF||next=='\n') return; // ïpîâåpÿåì íà êîíåö ôàéëà èëè ñòpîêè
unsc(); // âîçâpàùàåì ñèìâîë
temp=reading(); // ñ÷èòûâàåì ñëîâî
if(strcmp(temp,"FOR")!=NULL) // ïpîâåpÿåì â ñîîòâåòñòâèè ñ ãpàììàòèêîé
{
error(3); // åñëè íåâåpíî - îøèáêà
next_lex(); // ïpîïóñêàåì ýòî ñëîâî
}
del_space(); // óáèpàåì ïpîáåëû
if(var()==FALSE) error(4); // ïpîâåpÿåì ïåpåìåííóþ
sc(); // áåpåì ñëåäóþùèé ñèìâîë
if(next!='=') error(6); // ïpîâåpÿåì íà ñèìâîë '='
expr(); // ïpîâåpÿåì âûpàæåíèå
del_space(); // óáèpàåì ïpîáåëû
temp=reading(); // ñ÷èòûâàåì ñëîâî
if(strcmp(temp,"TO")!=NULL) // ïpîâåpÿåì â ñîîòâåòñòâèè ñ ãpàììàòèêîé
{
error(2); // åñëè íåâåpíî - îøèáêà
next_lex(); // ïpîïóñêàåì ýòî ñëîâî
}
del_space(); // óáèpàåì ïpîáåëû
expr(); // ïpîâåpÿåì âûpàæåíèå
del_space(); // óáèpàåì ïpîáåëû
if(next==EOF||next=='\n') return; // ïpîâåpÿåì íà êîíåö ôàéëà èëè ñòpîêè
temp=reading(); // ñ÷èòûâàåì ñëîâî
if(strcmp(temp,"STEP")==NULL) // ïpîâåpÿåì â ñîîòâåòñòâèè ñ ãpàììàòèêîé
{ // åñëè âåpíî
del_space(); // óáèpàåì ïpîáåëû
expr(); // ïpîâåpÿåì âûpàæåíèå
}
del_space(); // óáèpàåì ïpîáåëû
if(next!='\n') // ïpîâåpÿåì íà êîíåö ñòpîêè
{
error(1); // åñëè íå òàê - îøèáêà
sc();
while(next!='\n') sc(); // ñ÷èòûâàåì äî êîíöà ñòpîêè
unsc();
}
}
/************************************************************/
/* */
/* Ïåpåìåííàÿ */
/* */
/************************************************************/
int var(void)
{
sc();
if(isalpha(next)) // ñ÷èòûâàåì
{ // ïîêà îäíè áóêâû
while(isalnum(next)) sc();
unsc();
return(TRUE);
}
else
{
unsc();
return(FALSE);
}
}
/**********************************************************/
/* */
/* Àpèôìåòè÷åñêîå âûpàæåíèå */
/* */
/**********************************************************/
void expr(void)
{
term();
sc();
while(next=='+'||next=='-') // åñëè '+' èëè '-'
{
term(); // ïpîâåpÿåì òåpì
sc();
}
unsc();
}
/***********************************************************/
/* */
/* Òåpì */
/* */
/***********************************************************/
void term(void)
{
operand(); // ïpîâåpÿåì îïåpàíä
sc();
while(next=='*') // ïîêà '*'
{
sc();
if(next!='*') unsc(); // èëè ïîêà '**'
operand(); // ïpîâåpÿåì îïåpàíä
sc();
}
while(next=='/') // ïîêà '/'
{
operand(); // ïpîâåpÿåì îïåpàíä
sc();
}
unsc();
}
/********************************************************/
/* */
/* Îïåpàíä */
/* */
/********************************************************/
void operand(void)
{
sc();
if(next=='(') // åñëè '('
{
expr(); // ïpîâåpÿåì âûpàæåíèå
sc();
if(next!=')') // åñëè íå ')'
{
unsc();
error(5); // îøèáêà
return;
}
else return; // â ïpîòèâíîì ñëó÷àå âåpíóòüñÿ
}
unsc();
if(var()==TRUE) return; // åñëè ïåpåìåííàÿ - âåpíóòüñÿ
if(cbz()==TRUE
|
|