Синтаксичесий распознователь арифметического оператора условного перехода языка FORTRAN

FORTRAN 1997 Язык арифметического оператора условного перехода языка FORTRAN. IF АВ LABEL1,LABEL2,LABEL3 АВ – Арифметическое Выражение. LABEL1,LABEL2,LABEL3 – первая, вторая и третья метки соответственно G Оператор 1. Оператор IF АВ LABEL , LABEL , LABEL 2. LABEL ЦБЗ 3. АВ T АВ T АВ -T 4. T O TO TO TO 5. O АВ
Идентификатор ЧПЗ 6. Идентификатор ББЦ 7. ЦБЗ ЦЦ 8. ЧПЗ ЦЦ.ЦЦ Т ТЕРМ.О ОПЕРАНД.Б БУКВА.Ц ЦИФРА.ЦБЗ ЦЕЛОЕ БЕЗ ЗНАКА. ВОЗВЕДЕНИЕ В СТЕПЕНЬ.LABEL МЕТКА.ЧПЗ ЧИСЛО С ПЛАВАЮЩЕЙ ЗАПЯТОЙ. КОНЕЦ СТРОКИ пусто.АВ АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ Данная грамматика G ОПЕРАТОР , согласно классификации
Хомского, является контекстно-свободной, так как правая часть каждой редукции начинается либо с терминального символа, либо с нетерминального, принадлежащего объединнному словарю. A a, AVn, aV. Грамматика G ОПЕРАТОР не является автоматной, так как не все е редукции начинаются с терминального символа. По этой же причине данная грамматика не является S – грамматикой Для данной грамматики реализован разбор методом рекурсивного спуска, поскольку она относится
к классу контекстно-свободных. Идея метода состоит в том, что каждому нетерминальному символу ставится в соответствие определнная программная единица функция, которая распознат цепочку, порождаемую этим нетерминалом. Эти процедуры и функции вызываются в соответствии с правилами грамматики и иногда вызывают сами себя. Данный метод реализован на языке C, поскольку он обладает рекурсивными возможностями Для данной грамматики производится только диагностика и нейтрализация ошибок.
Исправление ошибок не производится. Нейтрализация ошибок осуществляется по методу Айронса, то есть, спускаясь по синтаксическому дереву без возврата по контексту, при обнаружении тупиковой ситуации отбрасываются те литеры символы, которые привели в тупиковую ситуацию и разбор продолжается IF6tg4569.347y-5556 64,44,548 Текущий символ – 40. AB – Проверка на Арифметическое Выражение. Текущий символ – 40. Term – Проверка на Терм. Operand – Проверка на Операнд. AB – Проверка на Арифметическое Выражение. Текущий символ – 40. Term – Проверка на Терм. Operand – Проверка на Операнд. AB – Проверка на Арифметическое Выражение. Текущий символ 6 – 54. Term – Проверка на
Терм. Operand – Проверка на Операнд. IDENT – Проверка на Идентификатор с символа 6. FLOAT – проверка на число с плавающей запятой с цифры 6. Текущий символ – 47. Текущий символ t – 116. Term – Проверка на Терм. Operand – Проверка на Операнд. IDENT – Проверка на Идентификатор с символа t. Текущий символ –
43. AB – Проверка на Арифметическое Выражение. Текущий символ g – 103. Term – Проверка на Терм. Operand – Проверка на Операнд. IDENT – Проверка на Идентификатор с символа g. Текущий символ – 42. Текущий символ 4 – 52. Term – Проверка на Терм. Operand – Проверка на Операнд. IDENT –
Проверка на Идентификатор с символа 4. FLOAT – проверка на число с плавающей запятой с цифры 4. Текущий символ 5 – 53. Текущий символ 6 – 54. Текущий символ – 41. Текущий символ – 47. Текущий символ – 40. Term – Проверка на Терм. Operand – Проверка на Операнд. AB – Проверка на Арифметическое Выражение. Текущий символ 9 –
57. Term – Проверка на Терм. Operand – Проверка на Операнд. IDENT – Проверка на Идентификатор с символа 9. FLOAT – проверка на число с плавающей запятой с цифры 9. Текущий символ 46. Текущий символ 3 – 51. Текущий символ 4 – 52. Текущий символ 7 – 55. Текущий символ – 42. Текущий символ y –
121. Term – Проверка на Терм. Operand – Проверка на Операнд. IDENT – Проверка на Идентификатор с символа y. Текущий символ 45. AB – Проверка на Арифметическое Выражение. Текущий символ 5 – 53. Term – Проверка на Терм. Operand – Проверка на Операнд. IDENT – Проверка на Идентификатор с символа 5. FLOAT – проверка на число с плавающей запятой с цифры 5. Текущий символ 5 – 53. Текущий символ 5 – 53. Текущий символ – 41. Текущий символ – 41. Текущий символ – 42. Текущий символ – 42. Текущий символ 6 – 54. Term – Проверка на Терм. Operand – Проверка на Операнд. IDENT – Проверка на
Идентификатор с символа 6. FLOAT – проверка на число с плавающей запятой с цифры 6. Текущий символ – 41. Текущий символ – 32. Текущий символ 6 – 54. ABS – проверка на Целое Без Знака с цифры 6. Текущий символ 4 – 52. Текущий символ 44. Текущий символ 4 – 52. ABS – проверка на Целое Без Знака с цифры 4. Текущий символ 4 – 52. Текущий символ 44.
Текущий символ 5 – 53. ABS – проверка на Целое Без Знака с цифры 5. Текущий символ 4 – 52. Текущий символ 8 – 56. Текущий символ NULL – 0. IFr3450.22 3,56,1 Текущий символ – 40. AB – Проверка на Арифметическое Выражение. Текущий символ r – 114. Term – Проверка на Терм. Operand – Проверка на
Операнд. IDENT – Проверка на Идентификатор с символа r. Текущий символ – 42. Текущий символ – 42. Текущий символ 3 – 51. Term – Проверка на Терм. Operand – Проверка на Операнд. IDENT – Проверка на Идентификатор с символа 3. FLOAT – проверка на число с плавающей запятой с цифры 3.
Текущий символ 4 – 52. Текущий символ – 47. Текущий символ 5 – 53. Term – Проверка на Терм. Operand – Проверка на Операнд. IDENT – Проверка на Идентификатор с символа 5. FLOAT – проверка на число с плавающей запятой с цифры 5. Текущий символ 0 – 48. Текущий символ 46. Текущий символ 2 –
50. Текущий символ 2 – 50. Текущий символ – 41. Текущий символ – 32. Текущий символ 3 – 51. ABS – проверка на Целое Без Знака с цифры 3. Текущий символ 44. Текущий символ 5 – 53. ABS – проверка на Целое Без Знака с цифры 5. Текущий символ 6 – 54. Текущий символ 44. Текущий символ 1 – 49. ABS – проверка на Целое Без Знака с цифры 1. Текущий символ NULL – 0 FILE KURSOVIC.CPP. ВАРИАHТ 2. Арифметический оператор условного перехода языка FORTRAN. Кафедpа АСУ. Гpуппа А-513. Студент Бойко Константин Анатольевич. Пpеподаватели кандидат технических наук, доцент Шоpников Юpий Владимиpович, ассистент Панова Веpа Боpисовна.
Дата 30 апреля 1997г. Заголовочные файлы. include stdio.h include conio.h include string.h include stdlib.h include keyboard.h include dos.h include ctype.h Константы. define FILENAME TEXT.TXT define YES 1 define NO 2 define OK 3 define TEST Глобальные переменные. char file12260 Массив строк. char mes223050 Массив сообщений об ошибках. char bufer4096
Снимок с экрана. int com0 Показатель откомпилирован файл или нет. int pos2 Текущая позиция в строке. char string80 Текущая строка файла. char nx Текущий символ в строке. int e10 Счетчик страниц массива собщений об ошибках. int e20 Счетчик строк в странице. int l0 Счетчик меток. FILE flfopenMESSAGE.TXT,wt Файл с сообщениями об ошибках. Прототипы функций. void
Windowsint,int,int,int,char Построение окон. void Beepint,int Звуковой сигнал. void OpenFilevoid Открытие файла. void SecondWindowvoid Построение нижней панели. void MyPutschar,int Аналог putschar. void PrintFilevoid Печать файла. void Menuvoid Меню. int ireadkeyvoid Опрос клавиатуры. void
Helpvoid Помощь. void Grammarvoid Грамматика языка. void Languagevoid Язык оператора. void Compilevoid Компиляция. void Operatorchar Сканирование оператора. void Scanvoid Сканирование следующего символа. void Labelvoid Реализация Label. int ABSvoid Реализация ABS. int IDENTvoid Реализация
IDENT. int ABvoid Реализация AB. void Errorint Обработка ошибки. int Termvoid Реализация Term. int Operandvoid Реализация Operand. int Floatvoid Реализация Float. void Messageint Вывод сообщений об ошибках. Функция MAIN. void main setcursortypeSOLIDCURSOR window1,1,80,25 textattr113 clrscr forint i0i 24i cputs textcolorBLACK cputs Enter filename window20,7,60,17 textattr127 clrscr Windows20,7,60,17,Open a File gotoxy4,3 putsName gotoxy6,7 putsПо умолчанию будет введен файл gotoxy17,8 putsFILENAME window23,10,57,10 textattr31 clrscr OpenFile SecondWindow PrintFile setcursortypeNOCURSOR Menu Звуковой сигнал. void Beepint tone,int pause soundtone delaypause nosound Построение рамок. void Windowsint x,int y,int x1,int y1,char string y1 forint i2i x1-xi gotoxyi,1 putch
gotoxyi,y1-y putch fori1i y1-yi gotoxy2,i putch gotoxyx1-x,i putch gotoxy2,1 putchг gotoxyx1-x,1 putch gotoxyx1-x,y1-y putch- gotoxy2,y1-y putchL gotoxyx1-x-strlenstring22,1 putsstring Функция открытия файла. void OpenFilevoid char filename38 filename035 char pcgetsfilename strcpyfilename,p iffilename0NULL strcpyfilename,FILENAME FILE file if file fopenfilename, rt NULL window1,1,80,25 textattr7 setcursortypeNORMALCURSOR clrscr perrorERROR fcloseall getch exit1 forint
i0i 22i char temp255 iffgetstemp,80,fileNULL break strcpyfile1i,temp fclosefile Построение нижней панели. void SecondWindowvoid window1,1,80,25 textattr17 clrscr window1,1,80,24 textattr31 clrscr Windows1,1,80,24,File window1,25,80,25 textattr127 clrscr MyPuts F1 Help F2 Grammar F3 Language F4 Compile ESC Exit, LIGHTBLUE MyPuts. void MyPutschar string,int color int j0 forint i0stringi
NULLi ifstringi j0 textcolorcolor i j ifstringi j0 textcolorBLACK i j cprintfc,stringi ifstringiNULL break Функция вывода файла на экран. void PrintFilevoid window3,2,77,24 textattr31 forint i0i 22i cputsfile1i putchr Меню. void Menuvoid gettext1,1,80,25,bufer Вся информация с экрана заносится в буфер. int y1 Счетчик строк. gotoxy1,1 textattr63 clreol cputsfile10 textattr31 gotoxy5,23 cprintf -2d ,y while1 switch ireadkey case EASCF1 gettext1,1,80,25,bufer Help puttext1,1,80,25,bufer break case EASCF2 gettext1,1,80,25,bufer Grammar puttext1,1,80,25,bufer break case EASCF3 gettext1,1,80,25,bufer Language puttext1,1,80,25,bufer break case EASCF4 gettext1,1,80,25,bufer Compile puttext1,1,80,25,bufer window48,2,78,23 textattr95 clrscr Windows49,3,79,24,Message Messagey-1 break case EASCEsc window1,1,80,25 textattr7 clrscr fcloseall exit1 break case EASCUp ify 1 ifcom 0 window3,2,47,24 else window3,2,77,24 y gotoxy1,y textattr63 clreol cputsfile1y-1
gotoxy1,y1 textattr31 clreol cputsfile1y gotoxy5,23 cprintf d ,y ifcom 0 Messagey-1 break case EASCDown ify 22 ifcom 0 window3,2,47,24 else window3,2,77,24 gotoxy1,y textattr63 clreol cputsfile1y-1 gotoxy1,y-1 textattr31 clreol cputsfile1y-2 gotoxy5,23 cprintf d ,y ifcom 0 Messagey-1 break Help. void Helpvoid window1,1,80,25 textattr78 clrscr Windows1,1,80,25,Help window4,3,77,23 cprintfНОВОСИБИРСКИЙ
ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТnnr cprintf КАФЕДРА АСУnnr cprintf Курсовая работа по системному программированию на темуnr cprintf Арифметический оператор условного перехода языка FORTRAN.nnr cprintf Студента группы А-513nnr cprintf Бойко Константина Анатольевича.nnr cprintfВ программе использованы клавишиnr cprintf
F1 – данный Help.nr cprintf F2 – грамматика языка.nr cprintf F3 – язык оператора.nr cprintf F4 – компиляция файла.nr cprintf ESC – выход из программы.nnr cprintf Для выхода из Help нажмите любую клавишу. getch Грамматика. void Grammarvoid window10,2,70,23 textattr46 clrscr Windows10,2,70,23,Grammar window12,4,68,22 cprintf 1.
Оператор – IF АВ LABEL , LABEL , LABEL nr cprintf 2. LABEL – ЦБЗ nr cprintf 3. АВ – T АВ T АВ -Tnr cprintf 4. T – O TO TO TOnr cprintf 5. O – АВ Идентификатор ЧПЗ nr cprintf 6. Идентификатор – ББЦnr cprintf 7. ЦБЗ – ЦЦnr cprintf 8. ЧПЗ – ЦЦ.ЦЦnnr cprintf Условные обозначенияnr cprintf T – терм.nr cprintf O – операнд.nr cprintf Б – буква.nr cprintf Ц – цифра.nr cprintf ЦБЗ – целое без знака.nr cprintf ЧПЗ – число с плавающей запятой.nr cprintf – возведение в степень.nr cprintf LABEL – метка.nr cprintf АВ – арифметическое выражение. getch Язык. void Languagevoid window20,7,60,17 textattr62 clrscr
Windows20,7,60,17,Language window22,9,58,16 cprintf IF АВ LABEL1,LABEL2,LABEL3nnr cprintf АВ – Арифметическое Выражение.nr cprintf LABEL1,LABEL2,LABEL3 – первая,вторая и третья метки соответственно.nr getch Компиляция программы. void Compilevoid window20,7,55,13 textattr94 clrscr Windows20,7,55,13,Compile window22,8,58,16 gotoxy1,1 ifcom0 cprintfnn
Файл откомпилирован Beep900,1000 return cputsn Идет компиляция файла.rnn Пожалуйста, подождите ifdef TEST window1,1,80,25 clrscr endif forint i0file1i0NULLi Operatorfile1i ifl3 l0 Error11 e1 e20 com delay300 Beep1000,200 Оператор. void Operatorchar str pos2 l0 string0NULL strcpystring,str stringstrlenstring-1NULL char temp3 temp0str0 temp1str1 temp2NULL ifdef TEST putsstring putstemp getch endif fprintffl, n fprintffl,
sn,string ifstrcmptemp,IF0 ifdef TEST printfНе найден оператор IF.n endif Error10 return Scan ifnx Scan ifnx Error7 ifnxNULL Error12 Error9 return AB whilenx nxNULL nx Scan ifnx Error3 ifnxNULL Error9 return Scan ifnxNULL Error9 return ifnx Scan Label ifnx, Error5 Scan else Scan ifnxNULL return
Label ifnx, Error5 Scan else Scan ifnxNULL return Label ifnxNULL Error6 Scan return Scan. void Scanvoid nxstringpos ifdef TEST printfТекущий символ c – d.n,nx,nx endif fprintffl,Текущий символ c – d.n,nx,nx Метка. void Labelvoid ifABS NO Error8 Scan else l Целое Без Знака. int ABSvoid ifdef TEST cprintfABS – проверка на Целое Без Знака с цифры c.rn,nx endif fprintffl,ABS – проверка на Целое Без Знака с цифры c.n,nx ifisdigitnx whileisdigitnx Scan returnYES returnNO Арифметическое Выражение. int ABvoid ifdef TEST cprintfAB – Проверка на Арифметическое Выражение.rn endif fprintffl,AB – Проверка на Арифметическое
Выражение.n Scan ifnx Error12 returnNO Term ifnx AB else ifnx- AB ifnxNULL returnOK else ifnx nx nx Error1 returnYES Терм. int Termvoid ifdef TEST cprintfTerm – Проверка на Терм.rn endif fprintffl,Term – Проверка на Терм.n Operand ifnx Scan Term else ifnx Scan ifnx Scan Term else Term ifnxNULL returnOK else ifnx nx- nx
Error2 returnOK Операнд. int Operandvoid ifdef TEST cprintfOperand – Проверка на Операнд.rn endif fprintffl,Operand – Проверка на Операнд.n ifnx AB ifnx Error3 else Scan returnOK else ifIDENT NO ifFloat NO Error4 returnOK Идентификатор. int IDENTvoid ifdef TEST cprintfIDENT – Проверка на Идентификатор с символа c.rn,nx endif fprintffl,
IDENT – Проверка на Идентификатор с символа c.n,nx ifisalphanx whileisalphanx isdigitnx Scan returnYES returnNO Ошибки. void Errorint num char E Ожидается или Ожидается , или Ожидается Ожидается идентификатор или целое без знака Отсутствует Не конец строки Ожидается Метка – не целое без знака Отсутствуют метки Не найден оператор IF Отсутствует метка
Отсутствует AB NULL sprintfmese1e2,s,Enum-1 e2 ifdef TEST Beep1000,100 cprintfОшибка srn,Enum-1 getch endif fprintffl, n fprintffl,Ошибка srn,Enum-1 Float. int Floatvoid ifdef TEST cprintfFLOAT – проверка на число с плавающей запятой с цифры c.rn,nx endif fprintffl,FLOAT – проверка на число с плавающей запятой с цифры c.n,nx ifisdigitnx whileisdigitnx Scan ifnx. Scan whileisdigitnx Scan returnYES returnNO Message. void Messageint x window50,3,76,22 textattr95 clrscr gotoxy1,1 forint i0mesxi0NULLi cprintfsrn,mesxi . 1. Курс лекций по системному программированию. 2. Герберт Шилдт C для профессиональных программистов.