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

     

     

     

     

     

         
     
    Побудова формальної мови L
         

     

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

    Побудова формальної мови L

    WHILE () [];


    WHILE - вхідний термінальний символ

    - умовне вираження

    - деяка функція, яка може бути відсутнім

    - параметри функції, які теж можуть бути відсутні

    Приклад правильного синтаксису:

    WHILE (A> 4444 T | = T |! = T
    3. (O | T * O | T ** O | T + O | T-O | T/O
    4. (() | |
    5. (Б (Б | Ц)
    6. (Ц (Ц)
    7. (([{,}])< Br>8. (| | (

    Класифікація G [Z]

    G []:
    1. (While () [];
    2. (T | T | = T |! = T
    3. (O | T * O | T ** O | T + O | T-O | T/O
    4. (() | |
    5. (Б (Б | Ц)
    6. (Ц (Ц)
    7. (([{,}])< Br>8. (| | (

    Зробимо заміну нетермінальних символів:
    (Z

    (A

    (B

    (C
    (D

    (E

    (F

    (G
    Зробимо заміну термінальних символів:
    WHILE (a
    ((b
    ) (c
    ; (d
    Ц (f
    Б (g
    , (h

    G [Z]:
    1. Z (abAc [D] d
    2. A (B | A B | A = B | A! = B
    3. B (C | B * C | B ** C | B + C | B-C | B/C
    4. C (bAc | E | F
    5. E (g (g | f)
    6. F (f (f)
    7. D (Eb [G (hG)] c
    8. G (E | F | (
    Висновок: G [Z] - контекстно-вільна граматика.

    Вибір методу аналізу

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

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

    Розроблений алгоритм ставиться до загальновідомого методусинтаксичного розбору, запропонований Айронсом.

    Основна ідея методу полягає в тому, що на контекст без поверненнявідкидаються ті символи, які привели в контексте і розбіртриває.

    Наведемо приклад синтаксичного розбору:

    While (A>) cls ();
    1. Z (abAc [D] d
    2. A (B | A B | A = B | A! = B
    3. B (C | B * C | B ** C | B + C | B-C | B/C
    4. C (bAc | E | F
    5. E (g (g | f)
    6. F (f (f)
    7. D (Eb [G (hG)] c
    8. G (E | F | (

    Z

    ab A c D

    BAE

    CB g (g) b G c

    EC (

    g E < p> g

    While (A>) cls ()

    ;

    тупикова ситуація

    Тестування на ланцюжках < p> Протокол роботи синтаксичного розпізнавача оператора циклу whileмови С.

    _____________________________________________________________________< br>Обробляємо рядок - While (a>) cls ();
    Знайдено While перевірка почалася з символу - (
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - a
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ -)
    Перевірка на ЦБЗ, поточний символ -)
    Перевірка на FUNC, поточний символ - c
    Перевірка на IDENT, поточний символ - c

    Знайдені помилки в рядку While (a>) cls ();

    Попередження: Відсутній умова ()
    Не знайдено ідентифікатор або ЦБЗ < br>_____________________________________________________________________< br>Обробляємо рядок - while (13t * (ewqw ++()* we)rscr (456,345, rtgrt, 345444rtr ,,,)

    Відсутній (
    Відсутній)
    Попередження: Відсутній умова ()
    Відсутній; після функції
    Параметр функції не може начінатся з цифри
    Невідомий ідентифікатор (и) -

    435, 4,
    Не знайдено ідентифікатор або ЦБЗ
    Ідентифікатор не може починатися з цифри
    Не знайдено або не вірний параметр
    Невідома знакова конструкція
    _____________________________________________________________________< br>Обробляємо рядок - whiLE (43 - (sss (5445344> (5445r + erhgeerg (e> = rwe + + + r 788 erwe + +))scr (eee, qeer + erhgeerg (e> = rwe + + + r 788 erwe + +))scr (eee, qee77777u777) clrscr (,...,)

    Знайдено While перевірка почалася з символу - (
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - i
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - 7
    Перевірка на ЦБЗ, поточний символ - 7
    Перевірка на FUNC, поточний символ -
    Перевірка на IDENT, поточний символ - c
    Перевірка на PAR, поточний символ -,
    Перевірка на IDENT, поточний символ -,
    Перевірка на ЦБЗ, поточний символ -,

    Знайдені помилки в рядку while (i> 77777u777) clrscr (,...,)

    Відсутній; після функції
    Ідентифікатор не може починатися з цифри
    Не знайдено або не вірний параметр
    _____________________________________________________________________Обрабативаем рядок - while (4545>> 445 ---;

    Знайдено While перевірка почалася з символу - (
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - 4
    Перевірка на ЦБЗ, поточний символ - 4
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - 4
    Перевірка на ЦБЗ, поточний символ - 4
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ -
    Перевірка на ЦБЗ, поточний символ -
    Перевірка на FUNC, поточний символ -;
    Перевірка на IDENT, поточний символ -;

    Знайдені помилки в рядку while (4545>> 445 ---;

    Відсутній)
    Попередження: відсутній ім'я функції
    Не знайдений ідентифікатор або ЦБЗ
    Невідома знакова конструкція
    _____________________________________________________________________< br>Обробляємо рядок - while (i> = 0);

    Знайдено While перевірка почалася з символу - (
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - i
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - 0
    Перевірка на ЦБЗ, поточний символ - 0
    Перевірка на FUNC, поточний символ -;
    Перевірка на IDENT, поточний символ -;

    Знайдені помилки в рядку while (i> = 0);

    Попередження: відсутній ім'я функції
    _____________________________________________________________________< br>Обробляємо рядок - while (i> = 0) 544 ();

    Знайдено While перевірка почалася з символу - (
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - i
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - 0
    Перевірка на ЦБЗ, поточний символ - 0
    Перевірка на FUNC, поточний символ -
    Перевірка на IDENT, поточний символ - 5

    Знайдені помилки в рядку while (i> = 0) 544 ();

    Відсутній; після функції
    Попередження: відсутній ім'я функції < br>_____________________________________________________________________< br>Обробляємо рядок - whilei> = 0) clrscr (); 13

    Знайдено While перевірка почалася з символу - i
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - i
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - 0
    Перевірка на ЦБЗ, поточний символ - 0
    Перевірка на FUNC, поточний символ -
    Перевірка на IDENT, поточний символ - c

    Знайдені помилки в рядку whilei> = 0) clrscr (); 13

    Відсутній (
    Попередження: Відсутній умова ()
    _____________________________________________________________________< br>Обробляємо рядок - whilertt3432 * 23432)

    Знайдено While перевірка почалася з символу - (
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - d
    Перевірка на AB
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - 3
    Перевірка на ЦБЗ, поточний символ - 3
    Перевірка на TERM
    Перевірка на O
    Перевірка на IDENT, поточний символ - 2
    Перевірка на ЦБЗ, поточний символ - 2
    Перевірка на FUNC, поточний символ -

    Перевірка на IDENT, поточний символ -


    Знайдені помилки в рядку while (dd>> 3432 * 23432)

    Відсутня; після функції
    Попередження: відсутній ім'я функції
    Невідома знакова конструкція

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


    ВАРІАHТ # 10

    Синтаксичний распознователь оператора циклу While

    Файл програми - А513.cpp з текстом для розпізнання - test.513 з протоколом роботи - error.513

    ставки оплати праці адвокатів: АСУ
    Гpуппа: А-513
    Студент: Стариков Дмитро Олександрович
    Пpеподавателі: кандидат технічних наук, доцент

    Шоpніков Юpій Владіміpовіч, асистент Панова Веpа Боpісовна
    Дата: 30 травня 1997р.

    //-------------------------------------- ------------------------------------< br>-
    //Заголовки.
    //------------------------------------------------ --------------------------< br>-
    # include
    # include
    # include
    # include
    # include
    # include

    # define UP 72// стрілка вгору
    # define DOWN 80// стрілка вниз
    # define ALTX 45// вихід
    # define F1 59
    # define F2 60
    # define F3 61
    # define ESC 27

    # define FL_NAME "test.513"
    # define FL_TEST "error.513"

    void open_fl (void);// откpить файлvoid work_space (void);// управляти робочій областюvoid print_page (void);// друкує текст екpанvoid help_line (void);// текст за допомогою нижня стpочкаvoid help (int);int scan ();// Робить розбір рядкаint my_while ();// оператораint AB ();// арифметичне виразint TERM ();// Термint O ();// Операндint IDENT ();// Ідентифікаторint ZBZ ();// Ціле без знакаint FUNC ();// Функціяint PAR ();// Параметр

    char TEXT [22] [80];int position;// Номер поточної сторінкиint cur_y = 3;// положення куpсоpа на екpанеint x, y;// Поточна позиція при компіляції врядкуint f = 0;// При f = 1 помилки для функціїchar screen [4096];// Сохpаняет повну копію екpанаchar screen1 [4096];// Сохpаняет частина екpанаchar * mistake []={" Помилок немає !!!",// 0

    "оператора while не знайдено",// 1

    "Відсутній (",// 2

    "Відсутній)",// 3

    "Попередження: Відсутній умова ()",// 4

    "Відсутній; після функції",// 5

    "Попередження: відсутній ім'я функції",// 6

    "Пропущено/або * або ** або + або -",// 7

    "",// 8

    "Параметр функції не може начінатся з цифри",// 9

    "Невідомий ідентифікатор (и) -",// 10 < p> "Не знайдено ідентифікатор або ЦБЗ",// 11

    "Ідентифікатор не може починатися з цифри",// 12

    "Не знайдено або не вірний параметр",// 13

    "Невідома знакова конструкція",// 14

    "");// 15
    FILE * fl_t;

    int mistake_number [15];// масив зберігає коди помилок (0 або 1)

    // де 1-помилка присутня, 0 в іншому випадку

    // mistake_number [i], де i номер помилки з mistakechar strange [100];// перелік невідомих ідентифікаторів

    // знайдених в рядку під час розборуint s = 0;// поточна позиція в strange

    void main ()

    (open_fl (); help_line (); print_page (); work_space ();

    )
    //------------------------------------------------ --------------------------< br>-
    //Відкриття файлу
    //------------------------------------------------ --------------------------< br>--void open_fl (void)

    (

    FILE * fl; int i; window (1,1,80,25); textbackground (BLACK); textcolor (WHITE); clrscr ( );

    _setcursortype (_NOCURSOR); if ((fl_t = fopen (FL_TEST, "w "))== NULL) exit (1); if ((fl = fopen (FL_NAME," r ") ) == NULL)

    (window (18,10,60,16); textbackground (GREEN); textcolor (BLACK); clrscr (); gotoxy (5,2); cprintf ( "Немогу знайти файл test.513 "); gotoxy (5,3); cprintf (" перевірте його наявність на диску "); gotoxy (5,4); cprintf (" або створіть новий "); gotoxy (3,6); cprintf ( "Для продовження натисніть будь-якуклавішу "); getch (); exit (0);

    ) for (i = 0; i Б (Б | Ц) rrrrn"); cprintf ( "6. -> Ц (Ц) rn "); cprintf (" 7. -> ([{,}]) rn "); cprintf (" 8. -> | rn ");

    ) if (n == 3)

    (cprintf ( "n МОВА ОПЕРАТОРАnnnrr"); cprintf ( "WHILE (AB) [FUNCTION ([PAR, PAR ,...])]; rnn"); cprintf ( "AB - Вираз rn") ; cprintf ( "FUNCTION - функціяrn"); cprintf ( "PAR - параметри функції, можуть бути цифриабо текст rn "); cprintf (" кількість їх не ограніченоrnn "); cprintf (" Прогалини між символами недопустімиrnnn ");

    ) getch (); puttext (1,8,80,22, string) ; window (1,1,80,25);

    )

    //--------------------- -------------------------------------------------- ---
    -
    //Сканує до появи While
    //------------------------------------------------ --------------------------< br>--int scan ()

    (int k, j, w;// лічильники mistake_number [1] = 1; for (j = 0;; j ++)

    (if (TEXT [ x] [j] == NULL) break; if (TEXT [x] [j] == 'W')

    (y = j;// якщо знайшли W або w if (my_while () == 1) break;// то викликаємо

    )// my_while if (TEXT [x] [j] == 'w')

    (y = j; if ( my_while () == 1) break;

    ) if (TEXT [x] [j]! = '')

    (strange [s + +] = TEXT [x] [j ]; mistake_number [10] = 1;

    ) if (TEXT [x] [j] == '')

    (strange [s ++]=','; strange [ s ++]=' ';

    )

    ) strange [s] = NULL; return (1);

    )

    //------------------------------------------------- -------------------------< br>-
    //Обробляє While і викликає обробку функцій
    //------------------------------------------------ --------------------------< br>--int my_while ()

    (char str [10]; int k, j, w;// лічильники for (w = 0; w ')

    (y + +; if (TEXT [x] [y] == '=') y + +; for (z = 0; z

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

     

     

     

     

     

     

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