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

Министерство науки, высшей школы и техническойполитики Российской Федера ции.Новосибирский ГосударственныйТехниче ский Университет.Курсовая работа по системному программированию.Операторприсваивания языка FORTRAN.Факультет АВТ.Кафедра АСУ.Группа А-513.Студент Ефименко Денис Владимирович. Преподаватель Шорников Юрий Владимирович.Ассистент Панова Вера Борисовна.Дата 10 июня1997 года.Отметка о защите Новосибирск 1997.Язык оператора присваивания FORTRAN. Идентификатор арифметическое выражениеАрифметическоевыражение выражение, содержащее в себе операции , , , , а также . возведение в степень.Грамматика языка.

G lt ОПЕРАТОР gt 1. lt ОПЕРАТОР gt lt ИДЕНТИФИКАТОР gt lt ВЫРАЖЕНИЕ gt 2. lt ВЫРАЖЕНИЕ gt Т lt ВЫРАЖЕНИЕ gt Т lt ВЫРАЖЕНИЕ gt -Т3.Т О Т О Т О Т О4.О lt ВЫРАЖЕНИЕ gt lt ИДЕНТИФИКАТОР gt lt ДБЗ gt 5. lt ИДЕНТИФИКАТОР gt Б Б Ц L 6. lt ДБЗ gt Ц Ц .Ц Ц L Т ТЕРМ О ОПЕРАНД Б БУКВА Ц ЦИФРА ДБЗ ДРОБНОЕ БЕЗ ЗНАКА L КОНЕЦ СТРОКИ пусто ВОЗВЕДЕНИЕ В СТЕПЕНЬ Классификация грамматики.Данная грамматика G lt ОПЕРАТОР gt , согласноклассификации Хомского, является контекстно-свободной, так как правая частькаждой редукции начинается либо с терминального символа, либо снетерминального, принадлежащего объедин нному словарю.A a, A Vn, a V .Грамматика G lt ОПЕРАТОР gt не является автоматной, так как не все е редукцииначинаются с терминального символа.

По этой же причине данная грамматика неявляется S - грамматикой.Метод анализа.Для данной грамматики реализован разбор методомрекурсивного спуска, поскольку она относится к классу контекстно-свободных.

Идея метода состоит в том, что каждомунетерминальному символу ставится в соответствие определ нная программнаяединица функция , которая распозна т цепочку, порождаемую этим нетерминалом.Эти процедуры и функции вызываются всоответствии с правилами грамматики и иногда вызывают сами себя. Данный метод реализован на языке C , поскольку он обладает рекурсивными возможностями.Диагностика и нейтрализация ошибок.Для данной грамматики производится только диагностикаи нейтрализация ошибок.

Исправление ошибок не производится.Нейтрализация ошибок осуществляется по методу Айронса,то есть, спускаясь по синтаксическому дереву без возврата по контексту, приобнаружении тупиковой ситуации отбрасываются те литеры символы , которыепривели в тупиковую ситуацию и разбор продолжается.Тестирование.12 1Имя идентификатора должноначинаться с буквы. s223 s d ОШИБОК НЕТ sdsds skshj mxnx dcПропущена операция илинеправильное имя идентификатора. 0Имя идентификатора должноначинаться с буквы.Идентификатор состоиттолько из букв или цифр. as 3ОШИБОК НЕТ 32 - Имя идентификатора должноначинаться с буквы.

Пропущен идентификатор иличисло.Пропущен идентификатор иличисло.Неизвестная операция илинеправильное имя идентификатора.Пропущен идентификатор иличисло. sdvsf gsdf 0Слевa от операций бытьне может . jhg 321 321 54 4 s 25 Пропущена операция илинеправильное имя идентификатора. d56gfsdfg ld 5Длина имени идентификаторане должна быть больше 6.Отсутствует . Листинг программы.

SP KURS. CPP КУРСОВАЯ РАБОТА ПО СИСТЕМНОМУПРОГРАММИРОВАНИЮ. ОПЕРАТОР ПРИСВАИВАНИЯ ЯЗЫКА ФОРТРАН имя файла test include lt process.h gt include lt stdio.h gt include lt string.h gt include lt ctype.h gt include lt stdlib.h gt include lt conio.h gt include lt io.h gt define UP 72 стрелка вверх define DOWN 80 стрелка вниз define EXIT 33 Esc define END 100enumLEX ERROR,CBZ,ID,PLUS, MIN,DIV,MUL,STEP,SKL,S KR,RAV, EOLN , EOF intnext,number 0,num 0,temp,line 1,err 80 ,sum int mistake 15 80 ,ofset 0 charcordinat 80 80 ,filename 80 char type mis ОШИБОК НЕТ , Имя идентификаторадолжно начинаться с буквы Идентификатор состоиттолько из букв или цифр Слевa от операцийбыть не может Неизвестная конструкция нет Длина имениидентификатора не должна быть больше 6 Отсутствует Неизвестная операцияили неправильное имя идентификатора Пропущен идентификаторили число Отсутствует Пропущена операция илинеправильное имя идентификатора Отсутствует выражение А ? Отсутствует идентификатор ? B . ,const intX1 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 amp amp 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 inti 1 i lt 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 ifelsemistake 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 caseEOF return 12 default return 0 else РАСПОЗНАЕТ ОШИБКИ ВИДЕНТИФИКАТОРЕ.void identif void if temp 0 while next! RAV amp amp next! EOLN amp amp next! EOF err sum next sum next scaner if temp 1 if next! CBZ amp amp next! ID if next ERROR error 2 else error 3 number num-1 num 0 if number gt 6 error 5 НЕТЕРМИНАЛ O lt Операнд gt 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 amp amp 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РМИНАЛ Е lt Выражение gt void expr void term while next PLUS next MIN next scaner expr НЕТЕРМИНАЛ T lt Терм gt 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 case12 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 MENUint 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 lt ENTER gt - для просмотраошибок в строке строка выделяется . n gotoxy 2,5 cprintf lt ESC gt - выход. 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 gt 0?n-1 n,YWINDOW else Y if n gt 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,intnumline clrscr for int a 0 a lt 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. В.Н. Лебедев Введение в системы программирования.