ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Синтаксичний Розпізнавач арифметичного оператора умовного переходу мови FORTRAN
         

     

    Інформатика, програмування

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

    Федерації.

    Новосибірський Державний Технічний Університет.

    Курсова робота з системного програмування.
    Синтаксичний Розпізнавач арифметичного оператора умовного переходу мови FORTRAN.

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

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

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

    Мова арифметичного оператора умовного переходу мови FORTRAN.

    IF () LABEL1, LABEL2, LABEL3

    АВ - Арифметичне Вираз.
    LABEL1, LABEL2, LABEL3 - перший, другий і третій мітки відповідно.

    Граматика мови.

    G []:
    1. (IF (),,< br>2. (
    3. (T | (T |-T
    4. T (O | T * O | T/O | T ((O
    5. O (() | |
    6. (Б (Б | Ц)
    7. (Ц (Ц }[(]< br>8. (Ц (Ц) [. Ц (Ц)]

    Умовні позначення:

    | Т | - | ТЕРМ. |
    | Про | - | операнд. |
    | Б | - | БУКВА. |
    | Ц | - | ЦИФРА. |
    | ЦБЗ | - | ціле без знаку. |
    | ((| - | Піднесення до степеня. |
    | LABEL | - | МЕТКА. |
    | ЧПЗ | - | числа з плаваючою комою. |
    | (| - | КІНЕЦЬ СТРОКИ (пусто). |
    | АВ | - | арифметичних виразів. |

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

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

    A (a, A (Vn, a (V (.

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

    Метод аналізу.

    Для даної граматики реалізований розбір методом рекурсивного спуску,оскільки вона належить до класу контекстно-вільних.

    Ідея методу полягає в тому, що кожному нетермінальному символуставиться у відповідність певна програмна одиниця (функція), якарозпізнає ланцюжок, що породжуються цим нетерміналом.

    Ці процедури і функції викликаються відповідно до правилграматики і іноді викликають самі себе.

    Даний метод реалізований на мові C + +, оскільки він володієрекурсивними можливостями.

    Діагностика та нейтралізація помилок.

    Для даної граматики проводиться тільки діагностика та нейтралізаціяпомилок. Виправлення помилок не проводиться.

    Нейтралізація помилок здійснюється за методом Айронса, тобто,спускаючись по синтаксичному дереву без повернення на контекст, привиявленні тупикової ситуації відкидаються ті літери (символи), якіпривели в контексте і розбір триває.

    Тестування.

    (((((((((((((((((((((((((( ((((((((((((((< br>IF (((6/t + g * 456)/(9.347 * y-555)) ** 6) 64,44,548
    ((((((((((((((((((((((((((((((((((((((((< br>Поточний символ (- 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.
    ((((((((((((((((((((((((((((((((((((((((

    ((( (((((((((((((((((((((((((((((((((((((< br>IF (r ** 34/50.22) 3,56,1
    ((((((((((((((((((((((((((((((((((((((((< br>Поточний символ (- 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.
    ((((((((((((((((((((((((((((((((((((((((

    Лістинг програми.
    //(((((((((((((((((((((((((((((((((((((((< br>//FILE "KURSOVIC.CPP".
    //(((((((((((((((((((((((((((((((((((((((< br>//ВАРІАHТ # 2.
    //(((((((((((((((((((((((((((((((((((((((< br>//Арифметичний оператор умовного переходу мови FORTRAN.
    //(((((((((((((((((((((((((((((((((((((((< br>//Ставки оплати праці адвокатів: АСУ.
    //Гpуппа: А-513.
    //Студент: Бойко Константин Анатольевич.
    //Пpеподавателі: кандидат технічних наук, доцент Шоpніков Юpій
    Владіміpовіч,
    //Асистент Панова Веpа Боpісовна.
    //Дата: 30 квітня 1997р.
    //(((((((((((((((((((((((((((((((((((((((< br>//Заголовки.
    //(((((((((((((((((((((((((((((((((((((((< br># Include
    # Include
    # Include
    # Include
    # Include "keyboard.h"
    # Include
    # Include
    //(((((((((((((((((((((((((((((((((((((((< br>//Константи.
    //(((((((((((((((((((((((((((((((((((((((< br># Define FILE_NAME "TEXT.TXT"
    # Define YES 1
    # Define NO 2
    # Define OK 3
    //# Define TEST
    //(((((((((((((((((((((((((((((((((((((((< br>//Глобальні змінні.
    //(((((((((((((((((((((((((((((((((((((((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");// Файл з повідомленнями про помилки.
    //(((((((((((((((((((((((((((((((((((((((< br>//Прототипи функцій.
    //(((((((((((((((((((((((((((((((((((((((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);// Вивід повідомлень про помилки.
    //(((((((((((((((((((((((((((((((((((((((< br>//Функція MAIN.
    //(((((((((((((((((((((((((((((((((((((((void main ()

    (

    _setcursortype (_SOLIDCURSOR); window (1,1,80,25); textattr (113); clrscr (); for (int i = 0 ; i IF (),, nr "); cprintf (" 2. -> nr "); cprintf (" 3. -> T | + T |-Tnr "); cprintf (" 4. T -> O | T * O | T/O | T ** Onr "); 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 ( "- метка.nr"); cprintf ( "- арифметичне вираження."); getch ();

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Мова.
    //(((((((((((((((((((((((((((((((((((((((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, LABEL3nnr"); cprintf ( "АВ - Арифметичне Вираженіе.nr"); cprintf ( "LABEL1, LABEL2, LABEL3 - першу, другу і третю міткисоответственно.nr "); getch ();

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Компіляція програми.
    //(((((((((((((((((((((((((((((((((((((((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 ( "nn Файл відкомпілювати !");

    Beep (900,1000); return;

    ) cputs ( "n Йде компіляція файла.rnn Будь ласка,зачекайте ...");< br># ifdef TESTwindow (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);

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Оператор.
    //(((((((((((((((((((((((((((((((((((((((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 TESTputs (string);puts (temp);getch ();
    # endif fprintf (fl, "(((((((((((((((((((((((((((((( n"); fprintf (fl, "% sn", string); if (strcmp (temp, "IF")! = 0)

    (
    # ifdef TESTprintf ( "Не знайдено оператор 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 !=')' & & 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 (6);

    Scan ();

    ) return;

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Scan.
    //(((((((((((((((((((((((((((((((((((((((void Scan (void)

    (nx = string [pos ++];< br># ifdef TESTprintf ( "За цей символ% c -% dn", nx, nx);
    # endif fprintf (fl, "За цей символ% c -% dn", nx, nx);

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Мітка.
    //(((((((((((((((((((((((((((((((((((((((void Label (void)

    (if (ABS () == NO)

    (

    Error (8);

    Scan ();

    ) else l ++;

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Ціле Без Знака.
    //(((((((((((((((((((((((((((((((((((((((int ABS (void)

    (
    # ifdef TESTcprintf ( "ABS - перевірка на Ціле Без Знака з цифри% c.rn", nx);
    # endif fprintf (fl, "ABS - перевірка на Ціле Без Знака з цифри% cn", nx); if (isdigit (nx))

    (while (isdigit (nx)) < p> Scan (); return (YES);

    ) return (NO);

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Арифметичне Вираз.
    //(((((((((((((((((((((((((((((((((((((((int AB (void)

    (
    # ifdef TESTcprintf ( "AB - Перевірка на Арифметичне Вираженіе.rn");
    # 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 (YES);

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Терм.
    //(((((((((((((((((((((((((((((((((((((((int Term (void)

    (
    # ifdef TESTcprintf ( "Term - Перевірка на Терм.rn");
    # endif fprintf (fl, "Term - Перевірка на Терм.n ");

    Operand (); if (nx =='/')

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

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Операнд.
    //(((((((((((((((((((((((((((((((((((((((int Operand (void)

    (
    # ifdef TESTcprintf ( "Operand - Перевірка на Операнд.rn");
    # 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);

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Ідентифікатор.
    //(((((((((((((((((((((((((((((((((((((((int IDENT (void)

    (
    # ifdef TESTcprintf ( "IDENT - Перевірка на Ідентифікатор з символу% c.rn", nx);
    # endif fprintf (fl, "IDENT - Перевірка на Ідентифікатор з символу% cn", nx); if (isalpha (nx))

    (while (isalpha (nx) | | isdigit (nx))

    Scan (); return (YES);

    ) return (NO);

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Помилки.
    //(((((((((((((((((((((((((((((((((((((((void Error (int num)

    (char * E []={

    "Очікується '+' або'-'.",

    " Очікується ' *','/' або'**'.",

    "Очікується ).",

    " Очікується ідентифікатор або ціле без знаку .",

    "Відсутня','.",

    " Не кінець рядка .",

    "Очікується (.",

    " Позначка - не ціле без знаку .",

    "Відсутня мітки .",

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

    "Відсутній мітка .",

    "Відсутня AB .",

    NULL

    ); sprintf (mes [e1] [e2],"% s ", E [num-1]); e2 + +; < br># ifdef TEST
    Beep (1000,100);cprintf ( "Помилка:% srn", E [num-1]);getch ();
    # endif fprintf (fl, "(((((((((((((((((((((((((((( n"); fprintf (fl, "Помилка:% srn", E [num-1 ]);

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Float.
    //(((((((((((((((((((((((((((((((((((((((int Float (void)

    (
    # ifdef TESTcprintf ( "FLOAT - перевірка на число з плаваючою комою з цифри
    % c.rn ", nx);
    # endif fprintf (fl, "FLOAT - перевірка на число з плаваючою комою з цифри
    % cn ", nx); if (isdigit (nx))

    (while (isdigit (nx))

    Scan (); if (nx =='.')

    (

    Scan (); while (isdigit (nx))

    Scan ();

    ) return (YES);

    ) return (NO);

    )
    //(((((((((((((((((((((((((((((((((((((((< br>//Message.
    //(((((((((((((((((((((((((((((((((((((((void Message (int x)

    (window (50,3,76,22); textattr (95); clrscr (); gotoxy (1,1); for (int i = 0; mes [ x] [i] [0]! = NULL; i + +) cprintf ( "% srn", mes [x] [i ]);

    )
    //(((((((((((((((((((((((((((((((((((((((

    Література.

    1. Курс лекцій з системного програмування.
    2. Герберт Шилдт «C для професійних програмістів».


         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status