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

     

     

     

     

     

         
     
    Оператор присвоювання мови FORTRAN
         

     

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

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

    Федерації.

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

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

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

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

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

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

    Мова оператора присвоєння FORTRAN.

    Ідентифікатор = арифметичне вираз

    Арифметичне вираз - вираз, що містить у собі операції *, /, -,
    +, **, А також ().

    ** - піднесення до степеня.

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


    G []:
    1. (=
    2. (Т (+ Т ((Т
    3. Т (О (Т (О (Т/О (Т ((Про
    4. Про (() ((
    5. (Б (Б (Ц }[(]< br>6. (Ц (Ц) [. Ц (Ц }][(]

    | Т | - | ТЕРМ |
    | Про | - | Операнд |
    | Б | - | БУКВА |
    | Ц | - | ЦИФРА |
    | ДБЗ | - | Дробная БЕЗ ЗНАКА |
    | (| - | КІНЕЦЬ СТРОКИ (пусто) |
    | ** | - | Піднесення до степеня |

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

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

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

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

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

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

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

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

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

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

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

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

    Тестування.

    12 = 1
    Назва ідентифікатора має починатися з літери.
    -------------------------------------------------- -------s223 = (s )+((( d)))
    ПОМИЛОК НІ !!!!!< br>-------------------------------------------------- -------sdsds = skshj ** mxnx dc
    Некоректна операція або неправильне ім'я ідентифікатора.
    -------------------------------------------------- -------< br>;; = 0
    Назва ідентифікатора має починатися з літери.
    Ідентифікатор складається тільки з літер або цифр.
    -------------------------------------------------- -------as = 115/3
    ПОМИЛОК НІ !!!!!< br>-------------------------------------------------- -------< br>32 =-*=< br>Назва ідентифікатора має починатися з літери.
    Відсутній ідентифікатор або число.
    Відсутній ідентифікатор або число.
    Невідома операція або неправильне ім'я ідентифікатора.
    Відсутній ідентифікатор або число.
    -------------------------------------------------- -------sdvsf + gsdf = 0
    Слевa від '=' операцій бути не може.
    -------------------------------------------------- -------jhg = 321 +321/54 * 4 (s 25)
    Некоректна операція або неправильне ім'я ідентифікатора.
    -------------------------------------------------- -------d56gfsdfg = (ld 5
    Довжина імені ідентифікатора не повинна бути більше 6.
    Відсутній')'.< br>-------------------------------------------------- -------

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

    // SP_KURS.CPP: Курсова робота з системного програмування.
    //
    //Оператора присвоєння МОВИ "ФОРТРАН"
    //
    //Ім'я файлу test

    # include
    # include
    # include
    # include
    # include
    # include
    # include
    # define UP 72/* стрілка вгору */
    # define DOWN 80/* стрілка вниз */
    # define EXIT '33 '/ * Esc */
    # define END 100

    enum LEX (ERROR, CBZ, ID, PLUS, MIN, DIV, MUL, STEP, SKL, SKR, RAV, _EOLN_, _EOF_);int next, number = 0, num = 0, temp, line = 1, err [80], sum;int mistake [15] [80], ofset = 0;char cordinat [80] [80], filename [80];char * type_mis []={" ПОМИЛОК НІ !!!!!",< br>"Ім'я ідентифікатора має починатися з літери.",
    "Ідентифікатор складається тільки з літер або цифр.",
    "Слевa від '=' операцій бути не може.",
    "Невідома конструкція (немає'=').",< br>"Довжина імені ідентифікатора не повинна бути більше 6.",
    "Відсутній')'.",< br>"Невідома операція або неправильне ім'я ідентифікатора.",
    "Відсутній ідентифікатор або число.",
    "Відсутній'('.",< br>"Некоректна операція або неправильне ім'я ідентифікатора.",
    "Відсутній вираз (А =?).",
    "Відсутній ідентифікатор (? = B ).",< br>"",};

    const int X1 = 2, Y1 = 20, X2 = 80, Y2 = 25;const int YWINDOW = Y2-Y1 1;void viewwin (int, int);void putmistake (int);int MENU (char *);void identif ();void ravno ();void expr (void);void term (void);void operand (void);int scaner (void);void error (int);void makefile (void);
    FILE * in, * out;

    void main (void)
    (strcpy (cordinat [0], "n");mistake [0] [0] = 13; mistake [0] [1] = END;clrscr ();printf ( "Введіть ім'я оброблюваного файлу:");gets (filename);if ((in = fopen (filename, "r "))== NULL)
    (printf (" n ПОМИЛКА!!! Файл вже НЕ ІСНУЄ !!!"); exit (-1);
    )while (! feof (in))
    (ravno (); mistake [line] [ofset] = END; line + +; ofset = 0;
    )fcloseall ();makefile ();num = 0;window (1,1,80,25);clrscr ();gotoxy (1,1);
    MENU ( "оператора присвоєння МОВИ /" "ФОРТРАН /" "n");clrscr ();window (1,1,80,25);clrscr ();printf ( "nnnnnnnnnn ВСІ ПОМИЛКИ що зберігається у файлі
    / "" ERRORS.TXT /""!!!!!");printf ( "nnnnnnnnnn НАТИСНІТЬ БУДЬ-ЯКУ
    КЛАВІШУ !!!!!! ");fcloseall ();exit (1);
    )

    void ravno ()
    (temp = 0;num = 0;sum = 0;next = scaner ();if ((next! = _EOLN_) & & (next! = _EOF_))
    (if (next == RAV)
    (error (12); err [0] = END;
    ) else identif ( ); if (next! = RAV) error (4); else

    (temp = 1; if (err [0]! = END)

    (if (err [0 ]! = ID) error (1); for (int i = 1; i6) error (5);
    )

    // НЕТЕРМІНАЛ "O" void operand ()
    (if (next == SKL)
    (next = scaner (); expr (); if (next! = SKR) error (6); else next = scaner ();
    ) else
    ( if (next == ID) (identif (); next = scaner ();) else

    (if (next! = CBZ)

    (if ((next! = _EOLN_ ) & & (next! = _EOF_))

    (if (next == ERROR)

    (error (7); next = scaner (); operand ();

    ) else

    (if (next == RAV) error (7); else error (8);

    )

    ) else error (8);

    ) else next = scaner ();

    )// else
    )// else
    )

    // НЕТEРМІНАЛ "Е" void expr (void)
    (term ();while ((next == PLUS) | | (next == MIN))
    (next = scaner (); expr ();
    )
    )

    // НЕТЕРМІНАЛ "T" void term (void)
    (operand (); while ((next == DIV) | | (next == MUL) | | (next == STEP))
    (next = scaner (); term ();
    )
    )

    void error (int choice)
    (switch (choice)
    (case 1: mistake [line] [ofset + +] = 1; break; case 2: mistake [line] [ofset + +] = 2; break; case 3: mistake [line] [ofset + +] = 3; break; case 4: mistake [line] [ofset + +] = 4; break; case 5: mistake [line] [ofset + +] = 5; break; case 6: mistake [line] [ofset + +] = 6; break; case 7: mistake [line] [ofset + +] = 7; break; case 8: mistake [line] [ofset + +] = 8; break; case 9: mistake [line] [ofset + +] = 9; break; case 10: mistake [line ] [ofset + +] = 10; break; case 12: mistake [line] [ofset + +] = 12; break; case 11: mistake [line] [ofset + +] = 11; break; default: break;
    )
    )

    void makefile (void)
    (char * s;int num_str = 0, oftemp, rep;if ((out = fopen ( "errors.txt", "w "))== NULL)
    (printf (" n ПОМИЛКА!!! Файл вже НЕ ІСНУЄ !!!"); exit (-1 );
    )if ((in = fopen (filename, "r "))== NULL)
    (printf (" n ПОМИЛКА!!! ФАЙЛ НЕ МОЖНА ВІДКРИТИ ДЛЯ ЗАПИСИ !!!"); exit (-1);
    )while (num_str + +, fgets (s, 80, in)! = NULL)
    (fputs ("--------------------------- ------------------------------< br>", out); fputc ( 'n', out); fputs (s, out); fputc ( 'n', out); rep = strlen (s); s [rep-1] = '

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

     

     

     

     

     

     

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