Курсовая: Разработка синтаксического распознавателя вычисляемого оператора перехода языка FORTRAN - текст курсовой. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Курсовая

Разработка синтаксического распознавателя вычисляемого оператора перехода языка FORTRAN

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 482 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникальной курсовой работы

Узнайте стоимость написания уникальной работы

Синтаксический распознаватель вычисляемого опе ?ратора перехода языка FORTRAN. Группа А -513. Борзов Андр ей Николаевич. 19 Министерство науки , высшей школы и технической политики Российской Федера ции. Новосибирский Государственный Техниче ский Университет. Курсовая работа по системному прогр ?аммированию. Разработка синтаксического распознавателя в ?ычисляемого операто ра перехода я зыка FORTRAN . Факультет : АВТ. Кафедра : АСУ. Группа : А -513. Студент : Борзов Андрей Никол аевич. Преподаватель : Шорник ов Юрий Влади мирович. Ассистент : П анова Вера Бо рисовна. Дата : 19 мая 1997 года. Отметка о защите : _______________________________ Новосибирск – 1997. Я зык оператора. Язык вычисляемого оператора переход а языка FORTRAN . GOTO МЕТКА КОНСТАНТА АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ МЕТКА – Идентификатор КОНСТАНТА – ЦЕЛОЕ БЕЗ ЗНАКА АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ – ВЫРАЖЕНИЕ , СО ДЕРЖАЩЕЕ В СЕБЕ ОПЕРАЦИИ *, /, -, +, **, А ТАК ЖЕ ( ). ** – ВОЗВЕДЕНИЕ В СТЕПЕНЬ. Гра мматика языка. G[< ОПЕРАТ ОР >] : 1. < ОПЕРАТОР > GOTO < ВЫРАЖЕНИЕ > 2. < ВЫРАЖЕНИЕ > Т < ВЫРАЖЕНИЕ > +Т < ВЫРАЖЕНИЕ > Т 3. Т О Т О Т / О Т О 4. О ( < ВЫРАЖЕНИЕ > ) < ИДЕНТИФИКАТОР > < ДБЗ > 5. < ИДЕНТИФИКАТОР > Б Б Ц [ ] 6. < ДБЗ > Ц Ц [ .Ц Ц ][ ] Т – ТЕРМ О – ОПЕРАНД Б – БУКВА Ц – ЦИФРА ДБЗ – ДРОБНОЕ БЕЗ ЗНАКА – КОНЕЦ СТРОКИ (пусто ) ** – ВОЗВЕД ЕНИЕ В СТЕПЕНЬ Классификация грамматики. Данная граммати ка G [< ОПЕРАТОР >] , согласно классификации Хомского , я вляется контекстно-свободной , так как правая ч асть каждой редукции начинается либо с те рминального символа , либо с нетерминального , п ринадлежаще го объединённому словарю. A a , A V n , a V . Грамматика G [< ОПЕРАТОР >] не является автоматной , так как не все её редукции начинаются с те р минального символа . По этой же причине дан ная грамматика не является S - грамматикой. Мет од анализа. Для данной грамматики реализован разбор методом рекурсивног о спуска , поскольку она относится к классу контекстно-свободных. Идея метода состоит в том, что каждому нетерминально му символу ставится в соответствие определённ ая программная единица (функция ), которая распо знаёт цепочку , порождаемую этим нетерминалом. Эти процедуры и функции вызываются в соответствии с правилами грамматики и ин огда вызывают сами себя. Данный метод реализован на языке C ++ , поскольку он обладает рекурсивными возможностями. Диа гностика и нейтрализация ошибок. Для данной грамматики производится только диагностика и нейтрализация ошибок . Исправление ошибок не п роизводится. Не йтрализация ошибок осуществляется п о методу Айронса , то есть , спускаясь по синтаксическому дереву без возврата по кон тексту , при обнаружении тупиковой ситуации от брасываются те литеры (символы ), которые привел и в тупиковую ситуацию и разбор продолжае тся. Тестирование. Протокол работы син таксического распознавателя вычисляемого оператора перехода языка FORTRAN. GOTO A+B-DD**(CC/(23+34**R))+Y*((C)) AB - Проверка на Арифметическое Выражение. SCAN - Сканирование . Текущий символ 'A' с кодом 65. T - Проверка на Терм. O - Проверка на Операнд. IDENT - Проверка на Идентификатор с символа A. SCAN - Сканиров ание . Текущий символ '+' с кодом 43. AB - Проверка на Арифметическое Выражение. SCAN - Сканирование . Текущий символ 'B' с кодом 66. T - Проверка на Терм. O - Проверка на Операнд. IDENT - Проверка на Идентификатор с символа B. SCAN - Сканирован ие . Текущий символ '-' с кодом 45. AB - Проверка на Арифметическое Выражение. SCAN - Сканирование . Текущий символ 'D' с кодом 68. T - Проверка на Терм. O - Проверка на Операнд. IDENT - Проверка на Идентификатор с символа D. SCAN - Сканирование . Текущий символ 'D' с кодом 68. SCAN - Сканирование . Текущий символ '*' с кодом 42. SCAN - Сканирование . Текущий символ '*' с кодом 42. SCAN - Сканирование . Текущий символ '(' с кодом 40. T - Проверка на Терм. O - Проверка на Операнд. AB - П роверка на Арифметическое Выраж ение. SCAN - Сканирование . Текущий символ 'C' с кодом 67. T - Проверка на Терм. O - Проверка на Операнд. IDENT - Проверка на Идентификатор с символа C. SCAN - Сканирование . Текущий символ 'C' с кодом 67. SCAN - Ска нирование . Текущий символ '/' с кодом 47. SCAN - Сканирование . Текущий символ '(' с кодом 40. T - Проверка на Терм. O - Проверка на Операнд. AB - Проверка на Арифметическое Выражение. SCAN - Сканирование . Текущий символ '2' с кодом 50. T - Проверка на Терм. O - Проверка на Операнд. IDENT - Проверка на Идентификатор с символа 2. FLOAT - Проверка на Дробное Без Знака с цифры 2. SCAN - Сканирование . Текущий символ '3' с кодом 51. SCAN - Сканирование . Текущий символ '+' с кодом 43. AB - Проверка на Арифметическое Выраж ение. SCAN - Сканирование . Текущий символ '3' с кодом 51. T - Проверка на Терм. O - Проверка на Операнд. IDENT - Проверка на Идентификатор с символа 3. FLOAT - Проверка на Дробное Без Знака с цифры 3. SCAN - Сканирование . Текущий символ '4' с кодом 52. SCAN - Сканирование . Текущий символ '*' с кодом 42. SCAN - Сканирование . Текущий символ '*' с кодом 42. SCAN - Сканирование . Текущий символ 'R' с кодом 82. T - Проверка на Терм. O - Проверка на Операн д. IDENT - Проверка на Идентификатор с символа R. SCAN - Сканирование . Текущий символ ')' с кодом 41. SCAN - Сканирование . Текущий символ ')' с кодом 41. SCAN - Сканирование . Текущий символ '+' с кодом 43. AB - Проверка на Арифметическое Выражение. S CAN - Сканирование . Текущий символ 'Y' с кодом 89. T - Проверка на Терм. O - Проверка на Операнд. IDENT - Проверка на Идентификатор с символа Y. SCAN - Сканирование . Текущий символ '*' с кодом 42. SCAN - Сканирование . Текущий символ '(' с кодом 40. T - Проверка на Терм. O - Проверка на Операнд. AB - Проверка на Арифметическое Выражение. SCAN - Сканирование . Текущий символ '(' с кодом 40. T - Проверка на Терм. O - Проверка на Операнд. AB - Проверка на Арифметическое Выражени е. SCAN - Сканирование . Текущий символ 'C' с кодом 67. T - Проверка на Терм. O - Проверка на Операнд. IDENT - Проверка на Идентификатор с символа C. SCAN - Сканирование . Текущий символ ')' с кодом 41. SCAN - Сканирование . Текущий символ ')' с ко дом 41. SCAN - Сканирование . Текущий символ NULL с кодом 0. GOTO A AB - Проверка на Арифметическое Выра ж ение. SCAN - Сканирование . Текущий символ 'A' с кодом 65. T - Проверка на Терм. O - Проверка на Операнд. IDENT - Проверка на Идентификатор с символа A. SCAN - Сканирование . Текущий символ NULL с кодом 0. Лис тинг программы. // // FILE "KURSOVIK.CPP". // // ВАРИА HТ № 3. // // Оператор перехода вычис ляемый языка FORTRAN. // // Кафедра : АСУ. // Группа : А -513. // Студент : Борзов Андрей Hиколаевич. // Преподаватели : кандидат технических наук , доцент Шорников Юрий Владимирович, // ассистент Панова Вера Борисовна. // Дата : 29 апреля 1997г. // // Подключаемые файлы . // #include #include #include #include #include #include #include #include"keyboard.h" // // Макроопредел ения . // #define ERROR 0 // Код ошибки . #define COL_STR 20 // Максимальное количество строк. #define STR_LEN 35 // Длина строки. #define MAX_STR_LEN 255 // Максимальная длина строки. #define FILENAME "TEST.TXT" // Имя файла , открываемого по умолчанию. #define YES 1 #define NO 2 #define OK 3 //#define T EST // Определено , е сли включен отладочный режим. // // Прот отипы функций. // int I_ReadKey(void); // Опрос клавиатуры. void Welc ome(void); // Экран при старте програ ммы. void Menu(void); // Меню . void Help(void); // Помощь . void MyExit(int=0); // Корректный выход из программы. void Beep(int=500,int=100); // Звуковой сигнал . void Usage(void); // Использование про гра ммы. int OpenFile(void); // Открытие файла . void DrawBox(int,int,int,int,char*); // Рисует рамк у с заголовком . void PrintText(void); // Печатает основно й текст. void Screen(void); // Перерисовка экрана . void Compile(void); // Компиляция . void Message(int); // Вывод сообщений об ошибках . void MyPuts(char*,int); // Аналог puts(char*);. void Language(void); // Язык оператора . void Grammar(void); // Грамматика я зыка . void GetFilename(void); // Запрос имени файла для открытия . int ScanS tr(char*); // Поиск GOTO. int Scaner(char*); // Обработка строки. void Scan(void); // Сканирование следующего символа. void Delspace(char*); // Удаление ненужных пробелов в строке. int AB(void); // Реализация нетерминала <АВ >. int T(void); // Реализация нетерминала <Т >. int O(void); // Реализация нетерминала <О >. int IDENT(void); // Реализация нетерминала . int FLOAT(void); // Реализация нетерминала . void Error(int=0,char* =""); // Обработка ошибки . // // Глобальные перемен ные . // char filename[MAX_STR_LEN]; // Имя файла . char *text[COL_STR+1]; // Массив указателей на строки те кста. char screen[4096]; // Буфер под копию экрана. char mes[21][20][80]; // Массив под сообщения об ошибках. char nx; // Текущий символ. int pos; // Текущая позиция в строке. char STR[80]; // Сканируемая строка. int ERR1; // Счетчик с траниц в массив е ошибок. int ERR2; // Счетчик строк в массиве ошиб ок. FILE *errors; // Дескриптор файла. // // Функция MAIN. // void main(int argc,char* argv[]) textcolor(LIGHTGRAY); textbackground(BLACK); _setcursortype(_NOCURSOR); clrscr(); if(argc>2) Usage(); MyExit(); if(argc==2) strcpy(filename,argv[1]); else Welcome(); gettext(20,7,60,17,screen); GetFilename(); while(OpenFile()) puttext(20,7,60,17,screen); GetFilename(); Menu(); // // Вывод сообщений об ошибках. // void Message(int j) window(42,3,79,23); textcolor(BLUE); textbackground(CYAN); clrscr(); for(int i=0;i -> GOTO < Вы p ажение >\r\ n"); cp uts(" 2. < Вы p ажение > -> T | < Вы p ажение >+T | < Вы p ажение >-T\r\n"); cputs(" 3. T -> O | T*O | T/O | T**O\r\n"); cputs(" 4. O -> (< Вы p ажение >) | < Идентификато p> | < Д БЗ >\r\n"); cputs(" 5. < Идентификато p> -> Б Б | Ц [ ] \ r\n"); cputs(" 6. < Д БЗ > -> Ц Ц [. Ц Ц ][ ] \ r\n\n"); cputs(" T - Те p м ;\r\n"); cputs(" O - Опе p анд ;\r\n"); cputs(" Б - Буква ;\r\n"); cputs(" Ц - Циф p а ;\r\n"); cputs(" Д БЗ - Дробное Без Знака ;\r\n"); cputs(" ** - возведение в степень ."); I_ReadKey(); // // Язык операто ра . // void Language(void) window(1,25,80,25); textattr(112); MyPuts(" ~F1~ Help ~F2~ Grammar ~F3~ Language ~F9~ Compile ~F10~ Quit ~Alt-X~ Quit ~Esc~ Quit",DARKGRAY); window(20,8,60,18); textcolor(WHITE); textbackground(GREEN); clrscr(); DrawBox(2,1,40,11,"Язык оператора "); window(22,9,58 ,17); textcolor(BLACK); cputs("\r\n"); cputs(" GOTO CONST | VAR | АВ\ r\n\n"); cputs(" CONST - Дробное без знака,\ r\n"); cputs(" VAR - идентификато p,\r\n"); cputs(" АВ - а pифметическое вы pажение ."); I_ReadKey(); // // Компиляция. // void Compile(void) static int compile=0; window(1,25,80,25); textattr(112); MyPuts(" ~F1~ Help ~F2~ Grammar ~F3~ Language ~F9~ Compile ~F10~ Quit ~Alt-X~ Quit ~Esc~ Quit",DARKGRAY); window(20,8,60,18); textcolor(WHITE); textbackground(RED); clrscr(); DrawBox(2,1,40,11,"Компиляция "); window(22,9,58,17); textcolor(YELLO W); cputs("\r\n"); if(compile>0) cputs(" Текст УЖЕ откомпилирован !!!"); Beep(900,1000); return; errors=fopen("PROTOCOL.TXT","wt"); cputs(" Идет компиляция.\ r\n\ n Пожалуйста , подождите ..."); #ifdef TEST window(1,1,80,25); textattr(78); clr scr(); #endif fprintf(errors,"/*******************************************************\n"); fprintf(errors," – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – \ n"); fprintf(errors," Протокол работы синтаксического р аспознавателя вычисляемого \ n"); fprintf(errors," оператора перехода языка FORTRAN. \ n"); fprintf(errors," – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – \ n"); for(int i=0;text[i] != NULL;i++) Scaner(text[i]); fprintf(errors," – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – \ n"); fprintf(errors," КОНЕЦ . \ n"); fprintf(errors," – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – \ n"); fprintf(errors,"********************************************* **********/\n"); Beep(900,100); compile++; // // Обработка строки. // int Scaner(char* string) char tmpstr[STR_LEN]; strcpy(tmpstr, string); Delspace(tmpstr); ScanStr(tmpstr); return 0; // // Поиск в строке оператора GOTO. // int ScanStr(char* string) int j; int i=0; int k=0; static int a=0; char tmp[80]; char label=NO; strcpy(STR,string); fprintf(errors," – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – \ n"); fprintf(errors,"%s\n",string); fprintf(errors," – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – \ n"); do tmp[0]=NULL; j=0; while(!isspace(string[k++]) && string[k-1]!=NULL) tmp[j++]=string[k-1]; tmp[j]=NULL; if((strcmp(tmp,"GOTO") != 0) && !isdigit(tmp[0])) #ifdef TEST cprintf("Не определен идентификатор %s.\r\n",tmp); #endif ERR1=a; ERR2=i; i++; Error(5,tmp); else if(!isdigit(tmp[0])) label=YES; ERR1=a; ERR2=i; pos=k; while(AB()!=OK); break; while(string[k] != NULL); if(label==NO) #ifdef TEST cprintf("Не найден оператор GOTO.\r\ nСтрока разбору не подлежит.\ r\n"); #endif Error(6); a++; return(OK); // // Удаление в строке пробелов. // void Delspace(char* string) char str[STR_LEN]; int j=0; int i=0; while(isspace(string[i]) && string[i] != NULL) i++; for(;string[i] != NULL;i++) if(islower(string[i])) string[i]=toupper(string[i]); str[j++]=string[i]; str[j]=NULL; sprintf(string,"%s",str); string[j-1]=NULL; #ifdef TEST textattr(30); clreol(); cputs(string); textattr(78); cputs("\r\n"); #endif // // Реализация нетерминала <Арифметическое Вы ражение >. // int AB(void) #ifdef TEST cprintf("AB - Проверка на Арифметическое Выражение.\ r\n"); #endif fprintf(errors,"AB - Проверка на Арифметическое Выраже ние.\ n"); Scan(); T(); if(nx=='+') AB(); else if(nx=='-') AB(); if(nx==NULL) return(OK); else if(nx!='*' && nx!='/' && nx!=')') Error(1); return(YES); // // Реализация нетерминала <Терм >. // int T(void) #ifdef TEST cprintf("T - Проверка на Терм.\ r\n"); #endif fprintf(errors,"T - Проверка на Терм.\ n"); O(); if(nx=='/') Scan(); T(); else if(nx=='*') Scan(); if(nx=='*') Scan(); T(); else T(); if(nx==NULL) return(OK); else if(nx!='+' && nx!='-' && nx!=')') Error(2); return(OK); // // Реализация нетерминала <Операнд >. // int O(void) #ifdef TEST cprintf("O - Проверка на Операнд.\ r\n"); #endif fprintf(errors,"O - Проверка на Операнд.\ n"); if(nx=='(') AB (); if(nx!=')') Error(3); else Scan(); return(OK); else if(IDENT() == NO) if(FLOAT() == NO) Error(4); return(OK); // // Реализация нетерминала <Идентификатор >. // int IDENT(void) #ifdef TEST cprintf("IDENT - Проверка на Идентификатор с символ а %c.\r\n",nx); getch(); #endif fprintf(errors,"IDENT - Проверка на Идентификатор с сим вола %c.\n",nx); if(isalpha(nx)) while(isalpha(nx) || isdigit(nx)) Scan(); return(YES); return(NO); // // Реализация нетерминала <Дробное Без З нака >. // int FLOAT(void) #ifdef TEST cprintf("FLOAT - Проверка на Дробное Без Знака с цифры %c.\r\n",nx); getch(); #endif fprintf(errors,"FLOAT - Проверка на Дробное Без Знака с цифры %c.\n",nx); if(isdigit(nx)) while(isdigit(nx)) Scan(); if(nx=='.') Scan(); while(isdigit(nx)) Scan(); return(YES); return(NO); // // Сканирование следующего символа из ст роки. // void Scan(void) #ifdef TEST cprintf("SCAN - Сканирование . Текущий символ '%c' с код ом %d.\r\n",STR[pos],STR[pos]); getch(); #endif fprintf(errors,"SCAN - Сканирование . Текущий символ ' %c' с кодом %d.\n",STR[pos],STR[pos]); nx=STR[pos]; pos++; // // Обработка ошибок. // void Error(int num,char* s) char *E[40]= "Ожидается '+' или '-'", "Ожидается '*', '/' или '**'", "Ожидается ')'", "Ожидается идентификатор или Дробное без знака ", "Не определен идентификатор ", "Не найден оператор GOTO\r\ nСтрока разбору не подлежит ", NULL ; sprintf(mes[ERR1][ERR2],"%s%s",E[num-1],s); fprintf(errors," – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – \ n"); fprintf(errors,"Error - Ошибка строка %d, ошибка # %d.\n",ERR1,ERR2); #ifdef TEST cprintf("Error - Ошибка : строка # %d, ошибка # %d.\ r\n",ERR1,ERR2); cprintf("%s\r\n",mes[ERR1][ERR2]); Beep(1000,200); getch(); #endif fprintf(errors,"%s\n",mes[ERR1][ERR2]); fprintf(errors," – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – \ n"); ERR2++; mes[ERR1][ERR2][0]=NULL; // // Подключаемый файл. // #include"intface.h" // Файл с функциями интерфейса. // // 1997 Борзов Андрей Hиколаевич . E-mail: ANDREY@RedHouse.nstu.nsk.su. // Литература. 1. Курс лекций по систе мному программированию. 2. Герберт Шилдт « C для професс ионал ьных программистов».
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Если девушка знает себе цену - то я знаю ее профессию.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, курсовая по программированию "Разработка синтаксического распознавателя вычисляемого оператора перехода языка FORTRAN", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru