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

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

Новосибирский Муниципальный Технический Институт.

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

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

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

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

Группа: А–513.

Студент: Бойко Константин Анатольевич.

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

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

Дата: 30 апреля 1997 г.

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


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


Язык оператора.

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

IF() LABEL1,LABEL2,LABEL3

АВ - Арифметическое Выражение.

LABEL1,LABEL2,LABEL3 - 1-ая, 2-ая и 3-я метки

соответственно.

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

G[]:

1. ® IF(),,

2. ®

3. ® T | +T | -T

4. T ® O | T*O | T/O | T**O

5. O ® () | |

6. ® БЦ

7. ® Ц{Ц}[L]

8. ® Ц{Ц}[.Ц{Ц}]

Условные обозначения:

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

ТЕРМ.

О

ОПЕРАНД.

Б

Буковка.

Ц

ЦИФРА.

ЦБЗ

ЦЕЛОЕ БЕЗ ЗНАКА.

**

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

LABEL

МЕТКА.

ЧПЗ

ЧИСЛО С ПЛАВАЮЩЕЙ ЗАПЯТОЙ.

L

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

АВ

АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ.


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

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

A ® a, A Î Vn , a Î V * .

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


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

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

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

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

Данный способ реализован Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат на языке C++, так как он обладает рекурсивными способностями.

Диагностика и нейтрализация ошибок.

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

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

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

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

IF(((6/t+g*456)/(9.347*y-555))**6) 64,44,548

¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

Текущий знак ( - 40.

AB Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат - Проверка на Арифметическое Выражение.

Текущий знак ( - 40.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

AB - Проверка на Арифметическое Выражение.

Текущий знак ( - 40.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

AB - Проверка на Арифметическое Выражение.

Текущий знак 6 - 54.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

IDENT - Проверка на Идентификатор с знака 6.

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

Текущий знак / - 47.

Текущий знак t - 116.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

IDENT - Проверка на Идентификатор с знака t.

Текущий знак + - 43.

AB - Проверка на Арифметическое Выражение.

Текущий знак g - 103.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

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

Текущий знак * - 42.

Текущий знак 4 - 52.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

IDENT - Проверка на Идентификатор с знака 4.

FLOAT - проверка на число с плавающей запятой с числа 4.

Текущий знак 5 - 53.

Текущий знак 6 - 54.

Текущий знак ) - 41.

Текущий знак / - 47.

Текущий знак ( - 40.

Term - Проверка на Терм.

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

AB - Проверка на Арифметическое Выражение.

Текущий знак 9 - 57.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

IDENT - Проверка на Идентификатор с знака 9.

FLOAT - проверка на число с плавающей запятой с числа 9.

Текущий знак . - 46.

Текущий знак 3 - 51.

Текущий знак 4 - 52.

Текущий знак 7 - 55.

Текущий знак * - 42.

Текущий знак y - 121.

Term - Проверка на Терм.

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

IDENT - Проверка на Идентификатор с знака y.

Текущий знак - - 45.

AB - Проверка на Арифметическое Выражение.

Текущий знак 5 - 53.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

IDENT - Проверка на Идентификатор с знака 5.

FLOAT - проверка на число с плавающей запятой с числа 5.

Текущий знак 5 - 53.

Текущий знак 5 - 53.

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

Текущий знак ) - 41.

Текущий знак * - 42.

Текущий знак * - 42.

Текущий знак 6 - 54.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

IDENT - Проверка на Идентификатор с знака 6.

FLOAT - проверка на число с плавающей запятой с числа 6.

Текущий знак ) - 41.

Текущий знак - 32.

Текущий знак 6 - 54.

Абс - проверка на Целое Без Знака с числа 6.

Текущий знак 4 - 52.

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

Текущий знак 4 - 52.

Абс - проверка на Целое Без Знака с числа 4.

Текущий знак 4 - 52.

Текущий знак , - 44.

Текущий знак 5 - 53.

Абс - проверка на Целое Без Знака с числа 5.

Текущий знак 4 - 52.

Текущий знак 8 - 56.

Текущий знак NULL - 0.

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

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

IF(r**34/50.22) 3,56,1

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

Текущий знак ( - 40.

AB - Проверка на Арифметическое Выражение.

Текущий знак r - 114.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

IDENT - Проверка на Идентификатор с знака r.

Текущий знак * - 42.

Текущий знак * - 42.

Текущий знак 3 - 51.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

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

FLOAT - проверка на число с плавающей запятой с числа 3.

Текущий знак 4 - 52.

Текущий знак / - 47.

Текущий знак 5 - 53.

Term - Проверка на Терм.

Operand - Проверка на Операнд.

IDENT - Проверка на Идентификатор с знака 5.

FLOAT - проверка на число с плавающей запятой с числа 5.

Текущий знак 0 - 48.

Текущий знак . - 46.

Текущий знак 2 - 50.

Текущий знак 2 - 50.

Текущий знак ) - 41.

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

Текущий знак 3 - 51.

Абс - проверка на Целое Без Знака с числа 3.

Текущий знак , - 44.

Текущий знак 5 - 53.

Абс - проверка на Целое Без Знака с числа 5.

Текущий знак 6 - 54.

Текущий знак , - 44.

Текущий знак 1 - 49.

Абс - проверка на Целое Без Знака с числа 1.

Текущий знак NULL - 0.

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

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

//¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// FILE "KURSOVIC.CPP".

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// ВАРИАHТ # 2.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾

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

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾

// Кафедpа : АСУ.

// Гpуппа : А-513.

// Студент : Бойко Константин Анатольевич.

// Пpеподаватели : кандидат технических наук, доцент Шоpников Юpий Владимиpович,

// помощник Панова Веpа Боpисовна.

// Дата : 30 апреля 1997г.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Заголовочные файлы.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾

# include

# include

# include

# include

# include "keyboard.h"

# include

# include

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾

// Константы.

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

# define FILE_NAME "TEXT Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат.TXT"

# define YES 1

# define NO 2

# define OK 3

//# define TEST

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

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

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

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

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

char Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат 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 Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат("MESSAGE.TXT","wt"); // Файл с сообщениями об ошибках.

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

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

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

void Windows(int,int,int,int,char*); // Построение окон Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат.

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 Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат Language(void); // Язык оператора.

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

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

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

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

int Абс(void); // Реализация Абс.

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

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

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

int Term(void); // Реализация Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат Term.

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

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

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

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾

// Функция MAIN.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾

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 Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат);

Menu();

}

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

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

//¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void Beep(int tone,int pause)

{

sound(tone);

delay(pause);

nosound();

}

//¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

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

//¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

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

{

y1++;

for(int i=2;i

{

gotoxy(i,1);

putch('=');

gotoxy(i,y Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат1-y);

putch('=');

}

for(i=1;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);

}

//¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

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

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

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 Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат = 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);

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

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

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

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);

}

//¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// MyPuts.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

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 Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат(string[i]=='~' && j!=0)

{

textcolor(BLACK);

i++;

j--;

}

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

if(string[i]==NULL)

break;

}

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾

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

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

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

{

window(3,2,77,24);

textattr(31);

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

{

cputs(file1[i]);

putch('\r');

}

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾

// Меню.

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

void Menu(void)

{

gettext(1,1,80,25,bufer Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат); // Вся информация с экрана заносится в буфер.

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 Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат);

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 Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат+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;

}

}

}

//¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Help.

//¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

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(" Курсовая работа Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат по системному программированию на тему:\n\r");

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

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

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

cprintf("В программке применены кнопки:\n\r");

cprintf(" F1 - данный Help.\n\r");

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

cprintf(" F3 - язык оператора.\n\r");

cprintf(" F4 - компиляция файла.\n\r");

cprintf(" ESC - выход из программки.\n\n\r");

cprintf(" Для выхода из Help нажмите всякую кнопку.");

getch();

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Грамматика.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾

void Grammar(void)

{

window(10,2,70,23);

textattr(46);

clrscr();

Windows(10,2,70,23,"Grammar");

window(12,4,68,22);

cprintf(" 1. -> IF(),,\n\r");

cprintf(" 2. -> \n\r");

cprintf(" 3. -> T | +T | -T\n\r");

cprintf(" 4. T -> O | T*O | T/O | T**O\n\r");

cprintf(" 5. O -> () | | \n Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат\r");

cprintf(" 6. -> БЦ\n\r");

cprintf(" 7. -> Ц{Ц}\n\r");

cprintf(" 8. -> Ц{Ц}[.Ц{Ц}]\n\n\r");

cprintf(" Условные обозначения:\n\r");

cprintf(" T - терм.\n\r");

cprintf(" O - операнд.\n\r");

cprintf(" Б - буковка.\n\r");

cprintf(" Ц - цифра.\n\r");

cprintf(" ЦБЗ - целое без знака.\n\r Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат");

cprintf(" ЧПЗ - число с плавающей запятой.\n\r");

cprintf(" ** - строительство в степень.\n\r");

cprintf(" - метка.\n\r");

cprintf(" - арифметическое выражение.");

getch();

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾

// Язык.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾

void Language(void)

{

window(20,7,60,17);

textattr(62);

clrscr();

Windows(20,7,60,17,"Language");

window(22,9,58,16);

cprintf(" IF() LABEL1,LABEL2,LABEL3\n\n\r");

cprintf(" АВ - Арифметическое Выражение.\n\r");

cprintf(" LABEL1,LABEL2,LABEL3 - 1-ая,2-ая и 3-я метки соответственно.\n\r");

getch();

}

//¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Компиляция программки.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void Compile(void)

{

window(20,7,55,13);

textattr(94);

clrscr();

Windows(20,7,55,13,"Compile");

window(22,8,58,16);

gotoxy(1,1);

if(com!=0)

{

cprintf("\n\n Файл откомпилирован!");

Beep(900,1000);

return;

}

cputs("\n Идет компиляция файла.\r\n\n Пожалуйста, подождите...");

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

window(1,1,80,25);

clrscr();

#endif

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

{

Operator(file1[i]);

if(l!=3 && l!=0)

Error(11);

e1++;

e2=0;

}

com++;

delay(300);

Beep(1000,200);

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾

// Оператор.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾

void Operator(char* str)

{

pos=2;

l=0;

string[0]=NULL;

strcpy(string,str);

string[strlen(string)-1]=NULL;

char temp[3];

temp[0]=str[0];

temp[1]=str[1];

temp[2]=NULL;

#ifdef TEST

puts(string);

puts(temp);

getch();

#endif

fprintf(fl," ¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾\n");

fprintf(fl,"%s\n",string);

if(strcmp(temp,"IF")!=0)

{

#ifdef TEST

printf("Не найден оператор IF.\n");

#endif

Error(10);

return;

}

Scan();

if(nx==' ')

Scan();

if(nx!='(')

Error(7);

if(nx==NULL)

{

Error(12);

Error(9);

return;

}

AB();

while(nx Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат!=')' && nx!=NULL && nx!=' ')

Scan();

if(nx!=')')

Error(3);

if(nx==NULL)

{

Error(9);

return;

}

Scan();

if(nx==NULL)

{

Error(9);

return;

}

if(nx==' ')

Scan();

Label();

if(nx!=',')

{

Error(5);

Scan();

}

else

Scan();

if(nx==NULL)

return;

Label();

if(nx!=',')

{

Error(5);

Scan();

}

else

Scan();

if(nx==NULL)

return;

Label();

if(nx!=NULL)

{

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

Scan();

}

return;

}

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

// Scan.

//¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void Scan(void)

{

nx=string[pos++];

#ifdef TEST

printf("Текущий знак %c - %d.\n",nx,nx);

#endif

fprintf(fl,"Текущий знак Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат %c - %d.\n",nx,nx);

}

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

// Метка.

//¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

void Label(void)

{

if(Абс() == NO)

{

Error(8);

Scan();

}

else

l++;

}

//¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Целое Без Знака.

//¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

int Абс(void)

{

#ifdef TEST

cprintf("Абс - проверка на Целое Без Знака с числа %c.\r\n",nx);

#endif

fprintf(fl,"Абс - проверка на Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат Целое Без Знака с числа %c.\n",nx);

if(isdigit(nx))

{

while(isdigit(nx))

Scan();

return(YES);

}

return(NO);

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾

// Арифметическое Выражение.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾

int AB(void)

{

#ifdef TEST

cprintf("AB - Проверка на Арифметическое Выражение.\r\n");

#endif

fprintf(fl,"AB - Проверка на Арифметическое Выражение.\n");

Scan();

if(nx==')')

{

Error(12);

return(NO);

}

Term();

if(nx=='+')

{

AB();

}

else if(nx=='-')

{

AB();

}

if(nx==NULL)

return(OK);

else if(nx!='*' && nx!='/' && nx!=')')

Error(1);

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

}

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

// Терм.

//¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

int Term(void)

{

#ifdef TEST

cprintf("Term - Проверка на Терм.\r\n");

#endif

fprintf(fl,"Term - Проверка на Терм.\n");

Operand();

if Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат(nx=='/')

{

Scan();

Term();

}

else if(nx=='*')

{

Scan();

if(nx=='*')

{

Scan();

Term();

}

else Term();

}

if(nx==NULL)

return(OK);

else if(nx!='+' && nx!='-' && nx!=')')

Error(2);

return(OK);

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Операнд.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾

int Operand(void)

{

#ifdef TEST

cprintf("Operand - Проверка на Операнд.\r\n");

#endif

fprintf(fl,"Operand - Проверка на Операнд.\n");

if(nx=='(')

{

AB();

if(nx!=')')

Error(3);

else

{

Scan();

return(OK);

}

}

else if(IDENT() == NO)

{

if(Float() == NO)

Error(4);

}

return(OK);

}

//¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Идентификатор.

//¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

int IDENT(void)

{

#ifdef TEST

cprintf("IDENT - Проверка на Идентификатор с знака %c.\r\n",nx);

#endif

fprintf(fl,"IDENT - Проверка на Идентификатор с знака %c.\n Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат",nx);

if(isalpha(nx))

return(NO);

}

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

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

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

void Error(int num)

{

char *E[]={

"Ожидается '+' либо '-'.",

"Ожидается '*','/' либо '**'.",

"Ожидается ).",

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

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

"Не конец строчки.",

"Ожидается (.",

"Метка - не целое без знака.",

"Отсутствуют метки.",

"Не найден оператор IF.",

"Отсутствует метка.",

"Отсутствует AB.",

NULL

};

sprintf(mes[e1][e2],"%s",E[num-1]);

e2++;

#ifdef TEST

Beep(1000,100);

cprintf("Ошибка: %s\r\n",E[num-1]);

getch();

#endif

fprintf(fl," ¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾\n");

fprintf(fl,"Ошибка: %s\r\n",E[num-1]);

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

// Float.

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

int Float(void)

{

#ifdef TEST

cprintf("FLOAT - проверка на число с плавающей запятой с числа %c.\r\n",nx);

#endif

fprintf(fl,"FLOAT - проверка на число с плавающей запятой с числа %c.\n",nx);

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

{

while(isdigit(nx))

Scan();

if(nx=='.')

{

Scan();

while(isdigit(nx))

Scan();

}

return(YES);

}

return(NO);

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾

// Message.

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

void Message(int x Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат)

{

window(50,3,76,22);

textattr(95);

clrscr();

gotoxy(1,1);

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

cprintf("%s\r\n",mes[x][i]);

}

//¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾&frac Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN - реферат34;¾¾¾¾¾¾¾¾¾¾


Литература.

1. Курс лекций по системному программированию.

2. Герберт Шилдт «C для проф программистов».



sinonimi-ih-funkciya-v-rechi-smislovie-oshibki-svyazannie-s-ih-upotrebleniem.html
sinonimiya-kak-virazhenie-smislovoj-ekvivalentnosti-v-russkom-yazike-uchebno-metodicheskij-kompleks-po-modulyu-sovremennij.html
sinopsis-korotkometrazhnogo-kinoscenariya-lis.html