Ïðèìåð: Ãëîáàëüíàÿ ñåòü INTERNET
ß èùó:
Íà ãëàâíóþ  |  Äîáàâèòü â èçáðàííîå  

Ãëàâíàÿ/

Ïðîãðàììèðîâàíèå, áàçû äàííûõ. /

Ðåàëèçàöèÿ ÿçûêîâîãî ïðîöåññîðà îïåðàòîðà FOR ÿçûêà BASIC.

←ïðåäûäóùàÿ ñëåäóþùàÿ→
1 2 3 4 

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

←ïðåäûäóùàÿ ñëåäóþùàÿ→
1 2 3 4 


Copyright © 2005—2007 «RefStore.Ru»