Оператор присваивания языка FORTRAN - реферат

Министерство науки, высшей школы и технической политики Русской Федера­ции.

Новосибирский Муниципальный

Техниче­ский Институт.

Курсовая работа по системному программированию.

Оператор присваивания языка FORTRAN.

Факультет: АВТ.

Кафедра: АСУ.

Группа: А-513.

Студент: Ефименко Денис Владимирович.

Педагог: Шорников Юрий Владимирович.

Помощник: Панова Вера Борисовна.

Дата: 10 июня 1997 года.

Отметка о защите: _______________________________

Новосибирск – 1997.


Язык оператора Оператор присваивания языка FORTRAN - реферат.

Язык оператора присваивания FORTRAN.

Идентификатор = арифметическое выражение

Арифметическое выражение – выражение, содержащее внутри себя операции *, /, -, +, **, также ( ).

** – строительство в степень.

Грамматика языка.

G[< ОПЕРАТОР >] :

1. < ОПЕРАТОР > ® < ИДЕНТИФИКАТОР > = < ВЫРАЖЕНИЕ >

2. < ВЫРАЖЕНИЕ > ® Т ç < ВЫРАЖЕНИЕ > +Т ç < ВЫРАЖЕНИЕ > - Т

3. Т ® О ç Т * О ç Т / О ê Т ** О

4. О ® ( < ВЫРАЖЕНИЕ > ) ç < ИДЕНТИФИКАТОР > ç < ДБЗ >

5. < ИДЕНТИФИКАТОР > ® Б { Б ç Ц }[ L ]

6. < ДБЗ > ® Ц { Ц }[ .Ц { Ц Оператор присваивания языка FORTRAN - реферат }][ L ]

Т

ТЕРМ

О

ОПЕРАНД

Б

Буковка

Ц

ЦИФРА

ДБЗ

ДРОБНОЕ БЕЗ ЗНАКА

L

КОНЕЦ Строчки (пусто)

**

Строительство В СТЕПЕНЬ

Систематизация грамматики.

Данная грамматика G[], согласно систематизации Хомского, является контекстно-свободной, потому что правая часть каждой редукции начинается или с терминального знака, или с нетерминального, принадлежащего объединённому словарю.

A ® a Оператор присваивания языка FORTRAN - реферат, A Î Vn , a Î V * .

Грамматика G[] не является автоматной, потому что не все её редукции начинаются с терминального знака. По этой же причине данная грамматика не является S - грамматикой.

Способ анализа.

Для данной грамматики реализован разбор способом рекурсивного спуска, так как она относится к классу контекстно-свободных.

Мысль способа заключается в Оператор присваивания языка FORTRAN - реферат том, что каждому нетерминальному символу ставится в соответствие определённая программная единица (функция), которая распознаёт цепочку, порождаемую этим нетерминалом.

Эти процедуры и функции вызываются в согласовании с правилами грамматики и время от времени вызывают сами себя.

Данный способ реализован на языке C++, так как он обладает рекурсивными способностями.

Диагностика и Оператор присваивания языка FORTRAN - реферат нейтрализация ошибок.

Для данной грамматики делается только диагностика и нейтрализация ошибок. Исправление ошибок не делается.

Нейтрализация ошибок осуществляется по способу Айронса, другими словами, спускаясь по синтаксическому дереву без возврата по контексту, при обнаружении тупиковой ситуации отбрасываются те литеры (знаки), которые привели в тупиковую ситуацию и разбор длится.

Тестирование.

12=1

Имя Оператор присваивания языка FORTRAN - реферат идентификатора должно начинаться с буковкы.

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

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

ОШИБОК НЕТ!!!!!

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

sdsds=skshj**mxnx dc

Пропущена операция либо неверное имя идентификатора.

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

;;=0

Имя идентификатора должно начинаться с буковкы.

Идентификатор состоит только из букв либо цифр.

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

as=115/3

ОШИБОК НЕТ!!!!!

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

32=-*=

Имя идентификатора должно начинаться с буковкы.

Пропущен идентификатор либо число.

Пропущен Оператор присваивания языка FORTRAN - реферат идентификатор либо число.

Неведомая операция либо неверное имя идентификатора.

Пропущен идентификатор либо число.

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

sdvsf+gsdf=0

Слевa от '='операций быть не может .

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

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

Пропущена операция либо неверное имя идентификатора.

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

d56gfsdfg=(ld+5

Длина имени идентификатора не должна быть больше 6.

Отсутствует ')'.

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

Листинг программки.

// SP_KURS.CPP:КУРСОВАЯ РАБОТА ПО СИСТЕМНОМУ ПРОГРАММИРОВАНИЮ Оператор присваивания языка FORTRAN - реферат. //

// ОПЕРАТОР ПРИСВАИВАНИЯ ЯЗЫКА "ФОРТРАН" //

// название файла test

#include

#include

#include

#include

#include

#include

#include

#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 Оператор присваивания языка FORTRAN - реферат[80],sum;

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

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

char* type_mis[]={"ОШИБОК НЕТ!!!!!",

"Имя идентификатора должно начинаться с буковкы.",

"Идентификатор состоит только из букв либо цифр.",

"Слевa от '='операций быть не может .",

"Неведомая конструкция (нет '=').",

"Длина имени идентификатора не должна быть больше 6.",

"Отсутствует ')'.",

"Неведомая операция либо неверное имя идентификатора.",

"Пропущен Оператор присваивания языка FORTRAN - реферат идентификатор либо число.",

"Отсутствует '('.",

"Пропущена операция либо неверное имя идентификатора.",

"Отсутствует выражение (А=?) . ",

"Отсутствует идентификатор(?=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 Оператор присваивания языка FORTRAN - реферат 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 Оператор присваивания языка FORTRAN - реферат[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 Оператор присваивания языка FORTRAN - реферат НАЖМИТЕ Всякую Кнопку!!!!!! ");

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

{next=err[i];

identif();

}

}

temp=2;

next Оператор присваивания языка FORTRAN - реферат=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 Оператор присваивания языка FORTRAN - реферат(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 Оператор присваивания языка FORTRAN - реферат=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 Оператор присваивания языка FORTRAN - реферат: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 Оператор присваивания языка FORTRAN - реферат)

{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 Оператор присваивания языка FORTRAN - реферат)

{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 Оператор присваивания языка FORTRAN - реферат][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 Оператор присваивания языка FORTRAN - реферат;

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 Оператор присваивания языка FORTRAN - реферат);

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 Оператор присваивания языка FORTRAN - реферат("\\---------------------------------------------------------\\",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(" - для просмотра ошибок в строке(строчка Оператор присваивания языка FORTRAN - реферат выделяется). \n");

gotoxy(2,5);

cprintf(" - выход.\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 Оператор присваивания языка FORTRAN - реферат(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 Оператор присваивания языка FORTRAN - реферат==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

{gotoxy(1,a+1);

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

}

}

void putmistake(int n)

{int offtemp,x Оператор присваивания языка FORTRAN - реферат=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 Оператор присваивания языка FORTRAN - реферат для проф программистов».

3. В.Н. Лебедев «Введение в системы программирования»



operativno-rozisknaya-deyatelnost-tamozhennih-organov-referat.html
operativno-rozisknaya-harakteristika-ubijstv-umishlennogo-prichineniya-tyazhkogo-vreda-zdorovyu-i-polovih-prestuplenij.html
operativno-rozisknoe-meropriyatie-proslushivanie-telefonnih-peregovorov-ponyatie-sposobi-usloviya-subekti-provedeniya-ptp-oformlenie-rezultatov.html