загрузка...

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

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

Міністерство науки, вищої школи і технічної політики Російської

Федерації.

Новосибірський Державний

Технічний Університет.

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

Розробка синтаксичного распознавателя обчислюваного оператора переходу мови FORTRAN.
Факультет: АВТ.
Кафедра: АСУ.
Група: А-513.
Студент: Борзов Андрій Миколайович.
Викладач: Шорников Юрій Володимирович.
Асистент: Панова Віра Борисівна.
Дата: 19 мая 1997 года.
Відмітка про захист: _______________________________

Новосибірськ - 1997.

Мова оператора.

Мова обчислюваного оператора переходу мови FORTRAN.

GOTO МЕТКА (КОНСТАНТА (арифметичний вираз

МЕТКА - Ідентифікатор

КОНСТАНТА - ЦІЛЕ БЕЗ ЗНАКУ

арифметичний вираз - вираз, що містить У СОБІ ОПЕРАЦІЇ *, /,
+, **, А ТАКОЖ ().

** - СПОРУДЖЕННЯ У РІВЕНЬ .

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


G []:
1. (GOTO
2. (Т (+ Т ((Т
3. Т (О (Т (О (Т / О (Т ((О
4. О (() ((
5. (Б {Б (Ц} [(]
6. (Ц {Ц} [. Ц {Ц}] [(]

| Т | - | ТЕРМ |
| О | - | ОПЕРАНД |
| Б | - | БУКВА |
| Ц | - | ЦИФРА |
| ДБЗ | - | ДРОБОВЕ БЕЗ ЗНАКА |
| (| - | КІНЕЦЬ СТРОКИ (пусто) |
| ** | - | СПОРУДЖЕННЯ У РІВЕНЬ |

Класифікація граматики.

Дана граматика G [], згідно класифікації Хомського , є контекстно-вільною, оскільки права частина кожної редукції починається або з термінального символу, або з нетермінального, що належить об'єднаному словником.

A (a, A (Vn, 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 - Перевірка на Арифметичне Вислів.
SCAN - Сканування. Поточний символ '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 TEST // Визначено, якщо включений відлагоджувальний режим.
// ((((((( ((((((((((((((((((((((((((((((((
// Прототипи функцій.
// (((((((((((((((((((((((((((((((((((((((int I_ReadKey (void ); // Опитування клавіатури. void Welcome (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 ScanStr (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 rn "); cputs (" 2.-> T | + T |-Trn "); cputs (" 3. T-> O | T * O | T / O | T ** Orn "); cputs (" 4. O-> () | | rn "); cputs (" 5.-> Б {Б | Ц} [(] rn "); cputs ( "6.-> Ц {Ц} [. Ц {Ц}] [(] rnn"); cputs ("T - Теpм; rn"); cputs ("O - Опеpанд; rn"); cputs ("Б - Буква; rn "); cputs (" Ц - цифp; rn "); cputs (" ДБЗ - Дробове Без Знака; rn "); cputs (" ** - зведення

Сторінки: 1 2
загрузка...
ur.co.ua

енциклопедія  з сиру  аджапсандалі  ананаси  узвар