Áîëüøàÿ êîëëåêöèÿ ðåôåðàòîâ

No Image
No Image

Ðåêëàìà

Ñ÷åò÷èêè

Îïðîñû

Îöåíèòå íàø ñàéò?

No Image

Îïåðàòîð ïðèñâàèâàíèÿ ÿçûêà FORTRAN

Îïåðàòîð ïðèñâàèâàíèÿ ÿçûêà FORTRAN

Ìèíèñòåðñòâî íàóêè, âûñøåé øêîëû è òåõíè÷åñêîé ïîëèòèêè Ðîññèéñêîé Ôåäåðà­öèè.

Íîâîñèáèðñêèé Ãîñóäàðñòâåííûé

Òåõíè÷å­ñêèé Óíèâåðñèòåò.

Êóðñîâàÿ ðàáîòà ïî ñèñòåìíîìó ïðîãðàììèðîâàíèþ.


Îïåðàòîð ïðèñâàèâàíèÿ ÿçûêà FORTRAN.

Ôàêóëüòåò: ÀÂÒ.

Êàôåäðà: ÀÑÓ.

Ãðóïïà: À-513.

Ñòóäåíò: Åôèìåíêî Äåíèñ Âëàäèìèðîâè÷.

Ïðåïîäàâàòåëü: Øîðíèêîâ Þðèé Âëàäèìèðîâè÷.

Àññèñòåíò: Ïàíîâà Âåðà Áîðèñîâíà.

Äàòà: 10 èþíÿ 1997 ãîäà.

Îòìåòêà î çàùèòå: _______________________________



Íîâîñèáèðñê – 1997.


ßçûê îïåðàòîðà.

ßçûê îïåðàòîðà ïðèñâàèâàíèÿ FORTRAN.

Èäåíòèôèêàòîð = àðèôìåòè÷åñêîå âûðàæåíèå


Àðèôìåòè÷åñêîå âûðàæåíèå – âûðàæåíèå, ñîäåðæàùåå â ñåáå îïåðàöèè *, /, -, +, **, à òàêæå ( ).


** – âîçâåäåíèå â ñòåïåíü.

Ãðàììàòèêà ÿçûêà.


G[<ÎÏÅÐÀÒÎÐ>]:

1.<ÎÏÅÐÀÒÎÐ> ® <ÈÄÅÍÒÈÔÈÊÀÒÎÐ> = <ÂÛÐÀÆÅÍÈÅ>

2.<ÂÛÐÀÆÅÍÈÅ> ® Òç<ÂÛÐÀÆÅÍÈÅ>ç <ÂÛÐÀÆÅÍÈÅ>-Ò

3.Ò ® Î çÒ*Î ç Ò/Î êÒ**Î

4.Î ®(<ÂÛÐÀÆÅÍÈÅ>) ç<ÈÄÅÍÒÈÔÈÊÀÒÎÐ> ç<ÄÁÇ>

5.<ÈÄÅÍÒÈÔÈÊÀÒÎÐ> ® Á{Á çÖ}[L]

6.<ÄÁÇ> ® Ö{Ö}[{Ö}][L]


Ò

ÒÅÐÌ

Î

ÎÏÅÐÀÍÄ

Á

ÁÓÊÂÀ

Ö

ÖÈÔÐÀ

ÄÁÇ

ÄÐÎÁÍÎÅ ÁÅÇ ÇÍÀÊÀ

L

ÊÎÍÅÖ ÑÒÐÎÊÈ (ïóñòî)

**

ÂÎÇÂÅÄÅÍÈÅ Â ÑÒÅÏÅÍÜ



Êëàññèôèêàöèÿ ãðàììàòèêè.


Äàííàÿ ãðàììàòèêà G[<ÎÏÅÐÀÒÎÐ>], ñîãëàñíî êëàññèôèêàöèè Õîìñêîãî, ÿâëÿåòñÿ êîíòåêñòíî-ñâîáîäíîé, òàê êàê ïðàâàÿ ÷àñòü êàæäîé ðåäóêöèè íà÷èíàåòñÿ ëèáî ñ òåðìèíàëüíîãî ñèìâîëà, ëèáî ñ íåòåðìèíàëüíîãî, ïðèíàäëåæàùåãî îáúåäèí¸ííîìó ñëîâàðþ.

A ® a, AÎVn, aÎV*.


Ãðàììàòèêà G[<ÎÏÅÐÀÒÎÐ>] íå ÿâëÿåòñÿ àâòîìàòíîé, òàê êàê íå âñå å¸ ðåäóêöèè íà÷èíàþòñÿ ñ òåðìèíàëüíîãî ñèìâîëà. Ïî ýòîé æå ïðè÷èíå äàííàÿ ãðàììàòèêà íå ÿâëÿåòñÿ S - ãðàììàòèêîé.

Ìåòîä àíàëèçà.


Äëÿ äàííîé ãðàììàòèêè ðåàëèçîâàí ðàçáîð ìåòîäîì ðåêóðñèâíîãî ñïóñêà, ïîñêîëüêó îíà îòíîñèòñÿ ê êëàññó êîíòåêñòíî-ñâîáîäíûõ.

        Èäåÿ ìåòîäà ñîñòîèò â òîì, ÷òî êàæäîìó íåòåðìèíàëüíîìó ñèìâîëó ñòàâèòñÿ â ñîîòâåòñòâèå îïðåäåë¸ííàÿ ïðîãðàììíàÿ åäèíèöà (ôóíêöèÿ), êîòîðàÿ ðàñïîçíà¸ò öåïî÷êó, ïîðîæäàåìóþ ýòèì íåòåðìèíàëîì.

        Ýòè ïðîöåäóðû è ôóíêöèè âûçûâàþòñÿ â ñîîòâåòñòâèè ñ ïðàâèëàìè ãðàììàòèêè è èíîãäà âûçûâàþò ñàìè ñåáÿ.


        Äàííûé ìåòîä ðåàëèçîâàí íà ÿçûêå C++, ïîñêîëüêó îí îáëàäàåò ðåêóðñèâíûìè âîçìîæíîñòÿìè.



Äèàãíîñòèêà è íåéòðàëèçàöèÿ îøèáîê.


Äëÿ äàííîé ãðàììàòèêè ïðîèçâîäèòñÿ òîëüêî äèàãíîñòèêà è íåéòðàëèçàöèÿ îøèáîê. Èñïðàâëåíèå îøèáîê íå ïðîèçâîäèòñÿ.

Íåéòðàëèçàöèÿ îøèáîê îñóùåñòâëÿåòñÿ ïî ìåòîäó Àéðîíñà, òî åñòü, ñïóñêàÿñü ïî ñèíòàêñè÷åñêîìó äåðåâó áåç âîçâðàòà ïî êîíòåêñòó, ïðè îáíàðóæåíèè òóïèêîâîé ñèòóàöèè îòáðàñûâàþòñÿ òå ëèòåðû (ñèìâîëû), êîòîðûå ïðèâåëè â òóïèêîâóþ ñèòóàöèþ è ðàçáîð ïðîäîëæàåòñÿ.

Òåñòèðîâàíèå.

12=1

Èìÿ èäåíòèôèêàòîðà äîëæíî íà÷èíàòüñÿ ñ áóêâû.

\---------------------------------------------------------\

s223=(s)+(((d)))

ÎØÈÁÎÊ ÍÅÒ!!!!!

\---------------------------------------------------------\

sdsds=skshj**mxnx dc

Ïðîïóùåíà îïåðàöèÿ èëè íåïðàâèëüíîå èìÿ èäåíòèôèêàòîðà.

\---------------------------------------------------------\

;;=0

Èìÿ èäåíòèôèêàòîðà äîëæíî íà÷èíàòüñÿ ñ áóêâû.

Èäåíòèôèêàòîð ñîñòîèò òîëüêî èç áóêâ èëè öèôð.

\---------------------------------------------------------\

as=115/3

ÎØÈÁÎÊ ÍÅÒ!!!!!

\---------------------------------------------------------\

32=-*=

Èìÿ èäåíòèôèêàòîðà äîëæíî íà÷èíàòüñÿ ñ áóêâû.

Ïðîïóùåí èäåíòèôèêàòîð èëè ÷èñëî.

Ïðîïóùåí èäåíòèôèêàòîð èëè ÷èñëî.

Íåèçâåñòíàÿ îïåðàöèÿ èëè íåïðàâèëüíîå èìÿ èäåíòèôèêàòîðà.

Ïðîïóùåí èäåíòèôèêàòîð èëè ÷èñëî.

\---------------------------------------------------------\

sdvsf+gsdf=0

Ñëåâa îò '='îïåðàöèé áûòü íå ìîæåò .

\---------------------------------------------------------\

jhg=321+321/54*4(s+25)

Ïðîïóùåíà îïåðàöèÿ èëè íåïðàâèëüíîå èìÿ èäåíòèôèêàòîðà.

\---------------------------------------------------------\

d56gfsdfg=(ld+5

Äëèíà èìåíè èäåíòèôèêàòîðà íå äîëæíà áûòü áîëüøå 6.

Îòñóòñòâóåò ')'.

\---------------------------------------------------------\

Ëèñòèíã ïðîãðàììû.

//      SP_KURS.CPP:ÊÓÐÑÎÂÀß ÐÀÁÎÒÀ ÏÎ ÑÈÑÒÅÌÍÎÌÓ ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈÞ.       //

//                 ÎÏÅÐÀÒÎÐ ÏÐÈÑÂÀÈÂÀÍÈß ßÇÛÊÀ "ÔÎÐÒÐÀÍ"                  //

// èìÿ ôàéëà   test


#include<process.h>

#include<stdio.h>

#include<string.h>

#include<ctype.h>

#include<stdlib.h>

#include<conio.h>

#include<io.h>

#define            UP       72        /* ñòðåëêà ââåðõ  */

#define DOWN           80        /* ñòðåëêà âíèç   */

#define            EXIT   '\33'     /* Esc                */

#define  END  100


enum LEX{ERROR,CBZ,ID,PLUS,MIN,DIV,MUL,STEP,SKL,SKR,RAV,_EOLN_,_EOF_};

int next,number=0,num=0,temp,line=1,err[80],sum;

int mistake[15][80],ofset=0;

char cordinat[80][80],filename[80];

char* type_mis[]={"ÎØÈÁÎÊ ÍÅÒ!!!!!",

"Èìÿ èäåíòèôèêàòîðà äîëæíî íà÷èíàòüñÿ ñ áóêâû.",

"Èäåíòèôèêàòîð ñîñòîèò òîëüêî èç áóêâ èëè öèôð.",

"Ñëåâa îò '='îïåðàöèé áûòü íå ìîæåò .",

"Íåèçâåñòíàÿ êîíñòðóêöèÿ (íåò '=').",

"Äëèíà èìåíè èäåíòèôèêàòîðà íå äîëæíà áûòü áîëüøå 6.",

"Îòñóòñòâóåò ')'.",

"Íåèçâåñòíàÿ îïåðàöèÿ èëè íåïðàâèëüíîå èìÿ èäåíòèôèêàòîðà.",

"Ïðîïóùåí èäåíòèôèêàòîð èëè ÷èñëî.",

"Îòñóòñòâóåò '('.",

"Ïðîïóùåíà îïåðàöèÿ èëè íåïðàâèëüíîå èìÿ èäåíòèôèêàòîðà.",

"Îòñóòñòâóåò âûðàæåíèå (À=?) . ",

"Îòñóòñòâóåò  èäåíòèôèêàòîð(?=B).",

"                                ",};


const int X1=2,Y1=20,X2=80,Y2=25;

const int YWINDOW=Y2-Y1+1;

void viewwin(int ,int );

void putmistake(int );

int         MENU(char *);

void identif();

void ravno();

void expr(void);

void term(void);

void operand(void);

int  scaner(void);

void error(int);

void makefile(void);

FILE *in,*out;



void main(void)

{strcpy(cordinat[0],"\n");

mistake[0][0]=13;mistake[0][1]=END;

clrscr();

printf("Ââåäèòå èìÿ  îáðàáàòûâàåìîãî ôàéëà:");

gets(filename);

if((in=fopen(filename,"r"))==NULL)

 {printf("\n ÎØÈÁÊÀ!!! ÔÀÉË Ñ ÒÀÊÈÌ ÈÌÅÍÅÌ ÍÅ ÑÓÙÅÑÒÂÓÅÒ!!!");

  exit(-1);

 }

while(!feof(in))

 {ravno();

  mistake[line][ofset]=END;

  line++;

  ofset=0;

 }

fcloseall();

makefile();

num=0;

window(1,1,80,25);

clrscr();

gotoxy(1,1);

MENU("               ÎÏÅÐÀÒÎÐ ÏÐÈÑÂÀÈÂÀÍÈß ßÇÛÊÀ /""ÔÎÐÒÐÀÍ/""\n");

clrscr();

window(1,1,80,25);

clrscr();

printf("\n\n\n\n\n\n\n\n\n\n             ÂÑÅ ÎØÈÁÊÈ ÕÐÀÍßÒÜÑß Â ÔÀÉËÅ /""ERRORS.TXT/""!!!!!");

printf("\n\n\n\n\n\n\n\n\n\n                       ÍÀÆÌÈÒÅ ËÞÁÓÞ ÊËÀÂÈØÓ!!!!!!   ");

fcloseall();

exit(1);

}


void ravno()

{temp=0;

num=0;

sum=0;

next=scaner();

if((next!=_EOLN_)&&(next!=_EOF_))

 {if(next==RAV)

  {error(12);

   err[0]=END;

  }

  else identif();

  if(next!=RAV) error(4);

  else

            {temp=1;

              if(err[0]!=END)

               {if(err[0]!=ID) error(1);

                for(int i=1;i<sum;i++)

                           {next=err[i];

                            identif();

                           }

               }

    temp=2;

             next=scaner();


             if((next==_EOF_)||(next==_EOLN_)) error(11);

             else

     {while(1)

                         {expr();

                                    if(next==SKL) error(10);

                                    else

          {if(next==SKR)

            {error(9);

                                                 next=scaner();

            }

                                      if(next==ID)

            {error(10);

                                                 next=scaner();

            }

                                      if(next==ERROR) error(7);

                                      if((next==_EOF_)||(next==_EOLN_)) break;

           next=scaner();

                                     }//else

       } //while

      } //else

   }//else

  }//if

else mistake[line][ofset++]=13;

}


int scaner(void)

{int liter;

liter=fgetc(in);

num++;

if((isspace(liter))||(liter=='\t'))

 {while((isspace(liter))||(liter=='\t'))

   {if(liter=='\n') return(11);

    liter=fgetc(in);

   }

 }

if(isdigit(liter))

 {while(isdigit(liter))

            {liter=fgetc(in);

             num++;

            }

if(liter=='.')

 {liter=fgetc(in);

  while(isdigit(liter))

            {liter=fgetc(in);

             num++;

            }

ungetc(liter,in);

  num--;

  return(1);

 }

else

 {if(isalpha(liter))

            {number=0;

             while(isalnum(liter))

              {number++;

               num++;

               liter=fgetc(in);

     }

             ungetc(liter,in);

             num--;

             return(2);

   }

  else switch(liter)

            {case '+':num=0;return(3);

             case '-':num=0;return(4);

             case '/':num=0;return(5);

             case '*':num=0;

     if((liter=fgetc(in))=='*') return(7);

              else

       {ungetc(liter,in);

        return(6);

                }

    case '(':return(8);

             case ')':return(9);

             case '=':return(10);

             case '\n':return(11);

             case EOF:return(12);

             default:return(0);

   }

 }//else

}


// ÐÀÑÏÎÇÍÀÅÒ ÎØÈÁÊÈ Â ÈÄÅÍÒÈÔÈÊÀÒÎÐÅ.

void identif(void)

{if(temp==0)

  {while((next!=RAV)&&(next!=_EOLN_)&&(next!=_EOF_))

             {err[sum]=next;

              sum++;

              next=scaner();

    }

  }

if(temp==1)

 {if((next!=CBZ)&&(next!=ID))

             {if(next==ERROR) error(2);

     else error(3);

    }

  number=num-1;

  num=0;

 }

if(number>6)  error(5);

}


//  ÍÅÒÅÐÌÈÍÀË "O" <Îïåðàíä>

void operand()

{if(next==SKL)

  {next=scaner();

            expr();

            if(next!=SKR) error(6);

   else next=scaner();

  }

 else

  {if(next==ID){identif();next=scaner();}

            else

     {if(next!=CBZ)

                          {if((next!=_EOLN_)&&(next!=_EOF_))

                                      {if(next==ERROR)

               {error(7);

                                                             next=scaner();

                                                             operand();

               }

                                       else

                                                 {if(next==RAV) error(7);

              else error(8);

                                                 }

                                      }

         else error(8);

        }

                        else next=scaner();

     }//else

  }//else

}


//  ÍÅÒEÐÌÈÍÀË "Å" <Âûðàæåíèå>

void expr(void)

{term();

while((next==PLUS)||(next==MIN))

 {next=scaner();

  expr();

 }

}


//  ÍÅÒÅÐÌÈÍÀË "T" <Òåðì>

void term(void)

{operand();

 while((next==DIV)||(next==MUL)||(next==STEP))

  {next=scaner();

   term();

  }

}


void error(int choice)

{switch(choice)

  {case 1:mistake[line][ofset++]=1;                     break;

   case 2:mistake[line][ofset++]=2;              break;

   case 3:mistake[line][ofset++]=3;                      break;

   case 4:mistake[line][ofset++]=4;                      break;

   case 5:mistake[line][ofset++]=5;                      break;

   case 6:mistake[line][ofset++]=6;                      break;

   case 7:mistake[line][ofset++]=7;                      break;

   case 8:mistake[line][ofset++]=8;                      break;

   case 9:mistake[line][ofset++]=9;                      break;

   case 10:mistake[line][ofset++]=10;   break;

   case 12:mistake[line][ofset++]=12;      break;

   case 11:mistake[line][ofset++]=11;      break;

    default:break;

  }

}



void makefile(void)

{char *s;

int num_str=0,oftemp,rep;

if((out=fopen("errors.txt","w"))==NULL)

 {printf("\n ÎØÈÁÊÀ!!! ÔÀÉË Ñ ÒÀÊÈÌ ÈÌÅÍÅÌ ÍÅ ÑÓÙÅÑÒÂÓÅÒ!!!");

  exit(-1);

 }

if((in=fopen(filename,"r"))==NULL)

 {printf("\n ÎØÈÁÊÀ!!! ÔÀÉË ÍÅËÜÇß ÎÒÊÐÛÒÜ ÄËß ÇÀÏÈÑÈ!!!");

  exit(-1);

 }

while(num_str++,fgets(s,80,in)!=NULL)

 {fputs("\\---------------------------------------------------------\\",out);

  fputc('\n',out);

  fputs(s,out);

  fputc('\n',out);

  rep=strlen(s);

  s[rep-1]='\0';

  strcpy(cordinat[num_str],s);

  if((oftemp=mistake[num_str][0])==END)

             {fputs(type_mis[0],out);

              fputc('\n',out);

             }

  else

    {for(int k=0;mistake[num_str][k]!=END;k++)

                {oftemp=mistake[num_str][k];

                          fputs(type_mis[oftemp],out);

                          fputc('\n',out);

                }

    }

 }

fputs("\\---------------------------------------------------------\\",out);

fputc('\n',out);

fcloseall();

}


// MENU

int        MENU(char *s)

{int       dy,n;

 dy=line-1;

 textbackground(WHITE);

 textcolor(YELLOW);

 window(1,1,80,25);

 clrscr();

 gotoxy(2,1);

 cprintf("      SDenis\n  ");

 gotoxy(2,2);

 cputs(s);

 gotoxy(2,3);

 cprintf("Èñïîëüçóéòå êóðñîð ââåðõ/âíèç äëÿ âûáîðà ïðîñìàòðèâàåìîé ñòðîêè.\n");

 gotoxy(2,4);

 cprintf("<ENTER> - äëÿ ïðîñìîòðà îøèáîê â ñòðîêå(ñòðîêà âûäåëÿåòñÿ). \n");

 gotoxy(2,5);

 cprintf("<ESC> - âûõîä.\n");

 gotoxy(2,6);

 textbackground(WHITE);

 textcolor(RED);

 cprintf("********************      ÎØÈÁÊÈ    ÑÒÐÎÊÀÕ        *************************\n");

 textbackground(WHITE);

 textcolor(YELLOW);

 gotoxy(2,19);

 cprintf("*******************    ÑÒÐÎÊÈ  ÂÀØÅÃΠ ÔÀÉËÀ    ****************************\n");

 window(X1,Y1,X2,Y2);

 textcolor(BLACK);

 viewwin(0,YWINDOW);

 n = 0;

 int Y=1;

  while(1)

            {char c;

             gotoxy(1,Y);

             textbackground(GREEN);

             cprintf("%s",cordinat[n]);

             textbackground(WHITE);

             c=(c=getch())==0?c=getch():c;

             gotoxy(1,Y);

             cprintf("%s",cordinat[n]);

             switch (c)

                        {case    EXIT:

                         return(-1);

                case '\r':               /*enter*/

                             window(2,7,80,18);

                             clrscr();

           putmistake(n);

                             window(X1,Y1,X2,Y2);

                             break;

                case UP:

                    if (Y==1)  viewwin(n>0?n-1:n,YWINDOW);

                             else Y--;

                             if(n>0) n--;

                             break;

            case     DOWN:

                             if(Y==YWINDOW) viewwin((n==dy?n:n+1)-YWINDOW+1,YWINDOW);

              else Y++;

                             if(n+1==dy)

                                       {n=0;

                                        Y=1;

                                        viewwin(n,YWINDOW);

                                       }

                             else n++;

                          break;

                        }

            }

}


void viewwin(int num,int numline)

{clrscr();

for(int a=0;a<numline;a++)

 {gotoxy(1,a+1);

  cprintf("%s",cordinat[num++]);

 }

}


void putmistake(int n)

{int offtemp,x=1,y=1;

if((offtemp=mistake[n][0])==END)

 {cprintf("%s",type_mis[0]);

 }

else

 {for(int k=0;mistake[n][k]!=END;k++)

            {offtemp=mistake[n][k];

             if(offtemp==13) cprintf("%s\n",type_mis[offtemp]);

             else

     {cprintf("%d.%s\n",k+1,type_mis[offtemp]);

                        x++;

                        y++;

                        gotoxy(x,y);

     }

   }

 }

}



Ëèòåðàòóðà.


1. Êóðñ ëåêöèé ïî ñèñòåìíîìó ïðîãðàììèðîâàíèþ.

2. Ãåðáåðò Øèëäò «C äëÿ ïðîôåññèîíàëüíûõ ïðîãðàììèñòîâ».

3. Â.Í. Ëåáåäåâ «Ââåäåíèå â ñèñòåìû ïðîãðàììèðîâàíèÿ»




No Image
No Image No Image No Image


No Image
Âñå ïðàâà çàùèùåíû © 2010
No Image