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

--PAGE_BREAK--¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Кафед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                        FILE_NAME   «TEXT.TXT»

# define                        YES                 1

# define                        NO                   2

# define                        OK                   3

//# define          TEST

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Глобальные переменные.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

char file1[22][60];                     // Массив строк.

char mes[22][30][50];                // Массив сообщений об ошибках.

char bufer[4096];                      // Снимок с экрана.

int  com=0;                                // Показатель: откомпилирован файл или нет.

int  pos=2;                                 // Текущая позиция в строке.

char string[80];                          // Текущая строка файла.

char nx;                                    // Текущий символ в строке.

int  e1=0;                                  // Счетчик страниц массива собщений об ошибках.

int  e2=0;                                  // Счетчик строк в странице.

int  l=0;                                     // Счетчик меток.

FILE* fl=fopen(«MESSAGE.TXT»,«wt»);           // Файл с сообщениями об ошибках.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Прототипы функций.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void Windows(int,int,int,int,char*);           // Построение окон.

void Beep(int,int);                                  // Звуковой сигнал.

void Open_File(void);                            // Открытие файла.

void Second_Window(void);                   // Построение нижней панели.

void MyPuts(char*,int);                          // Аналог puts(char*).

void Print_File(void);                             // Печать файла.

void Menu(void);                                   // Меню.

int  i_readkey(void);                               // Опрос клавиатуры.

void Help(void);                                     // Помощь.

void Grammar(void);                              // Грамматика языка.

void Language(void);                             // Язык оператора.

void Compile(void);                                // Компиляция.

void Operator(char*);                            // Сканирование оператора.

void Scan(void);                                    // Сканирование следующего символа.

void Label(void);                                   // Реализация Label.

int  ABS(void);                                      // Реализация ABS.

int  IDENT(void);                                  // Реализация IDENT.

int  AB(void);                                        // Реализация AB.

void Error(int);                                      // Обработка ошибки.

int  Term(void);                                     // Реализация Term.

int  Operand(void);                                // Реализация Operand.

int  Float(void);                                      // Реализация Float.

void Message(int);                                 // Вывод сообщений об ошибках.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Функция MAIN.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void main()

            {

            _setcursortype(_SOLIDCURSOR);

            window(1,1,80,25);

            textattr(113);

            clrscr();

            for(int i=0;i<24;i++)

            cputs("ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ");

            textcolor(BLACK);

            cputs(" Enter filename");

            window(20,7,60,17);

            textattr(127);

            clrscr();

            Windows(20,7,60,17,«Open a File»);

            gotoxy(4,3);

            puts(«Name „);

            gotoxy(6,7);

            puts(“По умолчанию будет введен файл»);

            gotoxy(17,8);

            puts(FILE_NAME);

            window(23,10,57,10);

            textattr(31);

            clrscr();

            Open_File();

            Second_Window();

            Print_File();

            _setcursortype(_NOCURSOR);

            Menu();

            }

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Звуковой сигнал.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void Beep(int tone,int pause)

            {

            sound(tone);

            delay(pause);

            nosound();

            }

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Построение рамок.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void Windows(int x,int y,int x1,int y1,char* string)

{

y1++;

            for(int i=2;i<x1-x;i++)

                        {

                        gotoxy(i,1);

                        putch('=');

                        gotoxy(i,y1-y);

                        putch('=');

                        }

            for(i=1;i<y1-y;i++)

                        {

                        gotoxy(2,i);

                        putch('¦');

                        gotoxy(x1-x,i);

                        putch('¦');

                        }

gotoxy(2,1);

putch('г');

gotoxy(x1-x,1);

putch('¬');

gotoxy(x1-x,y1-y);

putch('-');

gotoxy(2,y1-y);

putch('L');

gotoxy((x1-x-strlen(string)+2)/2,1);

puts(string);

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Функция открытия файла.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾    продолжение
--PAGE_BREAK--¾¾¾¾¾¾¾¾¾¾

void Open_File(void)

{

char filename[38];

filename[0]=35;

char* p=cgets(filename);

strcpy(filename,p);

if(filename[0]==NULL)

            strcpy(filename,FILE_NAME);

FILE *file;

if ((file = fopen(filename, «rt»))== NULL)

                        {

            window(1,1,80,25);

                        textattr(7);

            _setcursortype(_NORMALCURSOR);

                        clrscr();

            perror(«ERROR»);

                        fcloseall();

            getch();

                        exit(1);

            }

            for(int i=0;i<22;i++)

                        {

                        char temp[255];

                        if((fgets(temp,80,file))==NULL)

                                    break;

                        strcpy(file1[i],temp);

                        }

fclose(file);

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Построение нижней панели.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void Second_Window(void)

            {

            window(1,1,80,25);

            textattr(17);

            clrscr();

            window(1,1,80,24);

            textattr(31);

            clrscr();

            Windows(1,1,80,24,«File»);

            window(1,25,80,25);

            textattr(127);

            clrscr();

            MyPuts(" ~F1~ Help ~F2~ Grammar ~F3~ Language ~F4~ Compile ~ESC~ Exit",

LIGHTBLUE);

            }

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// MyPuts.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void MyPuts(char* string,int color)

            {

            int j=0;

            for(int i=0;string[i] != NULL;i++)

                        {

                        if(string[i]=='~' && j==0)

                                    {

                                    textcolor(color);

                                    i++;

                                    j++;

                                    }

                        if(string[i]=='~' && j!=0)

                                    {

                                    textcolor(BLACK);

                                    i++;

                                    j--;

                                    }

                        cprintf("%c",string[i]);

                        if(string[i]==NULL)

                                    break;

                        }

            }

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Функция вывода файла на экран.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void Print_File(void)

            {

            window(3,2,77,24);

            textattr(31);

            for(int i=0;i<22;i++)

            {

                        cputs(file1[i]);

            putch('\r');

            }

            }

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Меню.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void Menu(void)

            {

            gettext(1,1,80,25,bufer);             // Вся информация с экрана заносится в буфер.

            int y=1;                                     // Счетчик строк.

            gotoxy(1,1);

            textattr(63);

            clreol();

            cputs(file1[0]);

            textattr(31);

            gotoxy(5,23);

            cprintf(" %-2d ",y);

            while(1)

                        {

                        switch (i_readkey())

                                    {

                                    case EASC_F1:

                                    gettext(1,1,80,25,bufer);

                                    Help();

                                    puttext(1,1,80,25,bufer);

                                    break;

                                    case EASC_F2:

                                    gettext(1,1,80,25,bufer);

                                    Grammar();

                                    puttext(1,1,80,25,bufer);

                                    break;

                                    case EASC_F3:

                                    gettext(1,1,80,25,bufer);

                                    Language();

                                    puttext(1,1,80,25,bufer);

                                    break;

                                    case EASC_F4:

                                    gettext(1,1,80,25,bufer);

                                    Compile();

                                    puttext(1,1,80,25,bufer);

                                    window(48,2,78,23);

                                    textattr(95);

                                    clrscr();

                                    Windows(49,3,79,24,«Message»);

                                    Message(y-1);

                                    break;

                                    case EASC_Esc:

                                    window(1,1,80,25);

                                    textattr(7);

                                    clrscr();

                                    fcloseall();

                                    exit(1);

                                    break;

                                    case EASC_Up:

                                    if(y>1)

                                                {

                                                if(com>0)

                                                            window(3,2,47,24);

                                                else

                                                            window(3,2,77,24);

                                                y--;

                                                gotoxy(1,y);

                                                textattr(63);

                                                clreol();

                                                cputs(file1[y-1]);

                                                gotoxy(1,y+1);

                                                textattr(31);

                                                clreol();

                                                cputs(file1[y]);

                                                gotoxy(5,23);

                                                cprintf(" %d ",y);

                                                if(com>0)

                                                            Message(y-1);

                                                }

                                    break;

                                    case EASC_Down:

                                    if(y<22)

                                                {

                                                if(com>0)

                                                            window(3,2,47,24);

                                                else

                                                            window(3,2,77,24);

                                                gotoxy(1,++y);

                                                textattr(63);

                                                clreol();

                                                cputs(file1[y-1]);

                                                gotoxy(1,y-1);

                                                textattr(31);

                                                clreol();

                                                cputs(file1[y-2]);

                                                gotoxy(5,23);

                                                cprintf(" %d ",y);

                                                if(com>0)

                                                            Message(y-1);

                                                }

                                    break;

                                    }

                        }

            }

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Help.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void Help(void)

            {

            window(1,1,80,25);

            textattr(78);

            clrscr();

            Windows(1,1,80,25,«Help»);

            window(4,3,77,23);

            cprintf(«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ\n\n\r»);

            cprintf("                                    КАФЕДРА   АСУ\n\n\r");

            cprintf("            Курсовая работа по системному программированию на тему:\n\r");

            cprintf(" \«Арифметический оператор условного перехода языка FORTRAN\».\n\n\r");

            cprintf("                                                Студента группы А-513\n\n\r");

            cprintf("                                                Бойко Константина Анатольевича.\n\n\r");

            cprintf(«В программе использованы клавиши:\n\r»);

            cprintf("                                                                продолжение
--PAGE_BREAK--
еще рефераты
Еще работы по информатике