Главная страница
Навигация по странице:

  • Приложение А (обязательное)

  • Приложение Б (обязательное)

  • Приложение В (обязательное)

  • Синтаксический анализатор

  • Семантический анализатор

  • Приложение Г (обязательное)

  • Курсовая ТЯП. КР. Теория автоматов и формальных языков


    Скачать 0.99 Mb.
    НазваниеТеория автоматов и формальных языков
    АнкорКурсовая ТЯП
    Дата03.02.2023
    Размер0.99 Mb.
    Формат файлаpdf
    Имя файлаКР.pdf
    ТипМетодические указания
    #919155
    страница5 из 5
    1   2   3   4   5
    Список использованных источников
    1 Ахо, А.В. Компиляторы: принципы, технологии и инструменты / А. Ахо, Р.
    Сети, Д. Ульман; перевод с англ. И.В. Красикова и др. - М.: Вильямс, 2001. - 767 с.: ил.; 24 см. - Библиогр.: с. 742-763. - Предм. указ.: 764-767. - 5000 экз. - ISBN 5-8459-
    0189-8 (в пер.).
    2 Власенко, А.В. Теория языков программирования и методы трансляции: учеб. пособие / А.В. Власенко, В.И. Ключко; М-во образования и науки РФ, ГОУ
    ВПО «Кубан. гос. технол. ун-т». - Краснодар: Изд-во КубГТУ, 2004. - 119 с.: ил.; 21 см. - Библиогр.: с. 118. - 75 экз. - ISBN 5-8333-0176-9.
    3 Гавриков, М.М. Основы конструирования компиляторов: учеб. пособие /
    М.М. Гавриков, А.Н. Иванченко, Д.В. Гринченков; М-во общ. и проф. образования
    РФ, Новочеркас. гос. техн. ун-т. – Новочеркасск: НГТУ, 1997. - 80 с.: ил.; 20 см. -
    Библиогр.: с. 79. – 75 экз. - ISBN 5-88998-059-9.
    4 Гордеев, А.В. Системное программное обеспечение: учеб. для вузов / А. Ю.
    Молчанов. - 3-е изд. - СПб.: Питер, 2010. - 398 с.: ил. - (Учебник для вузов). - Указ. лит.: с. 387-390. - Алф. указ.: с. 391-397. - ISBN 978-5-49807-153-4.
    5 Ишакова, Е.Н. Теория языков программирования и методов трансляции: учебное пособие / Е.Н. Ишакова. – Оренбург: ИПК ГОУ ОГУ, 2007. – 137 с. - ISBN
    978-5-7410-0712-9.
    6 Ишакова, Е.Н. Разработка компиляторов: Методические указания к курсовой работе / Е.Н. Ишакова. - Оренбург: ГОУ ОГУ, 2005. – 50 с.
    7 Карпов, В.Э. Классическая теория компиляторов: учеб. пособие / В.Э.
    Карпов; М-во образования РФ, Моск. гос. ин-т электрон. и математики (техн. ун-т). -
    М.: МГИЭМ, 2002. - 78 с.: ил.; 20 см. - Библиогр.: с. 78. - 150 экз. - ISBN 5-230-
    16344-5.
    8 Компаниец, Р.И. Системное программирование: основы построения трансляторов: учеб. пособие для высших и средних учебных заведений / Р.И.

    57
    Компаниец, Е.В. Маньков, Н.Е. Филатов. - СПб.: Корона принт, 2000. - 254, [1] с.: ил.; 23 см. - Библиогр.: с. 255. - 3000 экз. - ISBN 5-7931-0124-1.
    9 Мозговой, М.В. Классика программирования: алгоритмы, языки, автоматы, компиляторы. Практический подход / М.В. Мозговой. – СПб.: Наука и техника,
    2006. - 320 с.: ил.; 24 см. - 3000 экз. - ISBN 5-94387-224-8.
    10 Пратт, Т. Языки программирования: разработка и реализация / Т. Пратт, М.
    Зелковиц; пер. с англ. - СПб.: Питер принт, 2002. - 688 с.: ил.; 24 см. - Библиогр.: с.
    669-674. - Алф. указ.: с. 675-688. - Загл. и авт. ориг.: Programming languages / Ter- rence W. Pratt, Marvin V. Zelkowitz. - 4000 экз. - ISBN 5-318-00189-0 (в пер.).
    11 Рейуорд-Смит, В. Теория формальных языков. Вводный курс / В. Рейуорд-
    Смит; пер. с англ. Б.А. Кузьмина; под ред. И.Г. Шестакова. - М.: Радио и связь, 1988.
    - 127, [2] с.: ил.; 21 см. - Перевод изд.: A first course in formal language theory / V.J.
    Rayward Smith (Oxford etc.). - 30000 экз. - ISBN 5-256-00159-0.
    12 Серебряков, В.А. Основы конструирования компиляторов / В.А.
    Серебряков, М.П. Галочкин. - М.: Эдиториал УРСС, 2001. - 221, [1] с.: ил.; 20 см. -
    Библиогр. в конце кн. – 1000 экз. - ISBN 5-8360-0242-8.
    13 Соколов, А.П. Системы программирования: теория, методы, алгоритмы: учеб. пособие для студентов, обучающихся по направлению 654600 - Информатика и вычисл. техника / А.П. Соколов. – М.: Финансы и статистика, 2004. – 319, [1] с.: ил.; 21 см. - Библиогр.: с. 309-310. – Предм. указ.: с. 313-320. – 4000 экз. – ISBN 5-
    279-02770-7.
    14 Теория и реализация языков программирования: учебное пособие по курсу теории и реализации языков программирования
    / В.А. Серебряков, М.П. Галочкин,
    Д.Р. Гончар, М.Г. Фуругян. – М.: МЗ-Пресс, 2006. - 348, [1] с.: ил.; 20 см. -
    Библиогр.: с. 347-249. – 2000 экз. - ISBN 5-94073-094-9.
    15 Хантер, Р. Основные концепции компиляторов: / Р. Хантер; пер. с англ. -
    М.: Вильямс, 2002. - 252 с.: ил.; 21 см. - Библиогр.: с. 247-248. - Предм. указ.: с. 249-
    252. - 3000 экз. - ISBN 5-8459-0360-2.

    58
    Приложение А
    (обязательное)
    Укрупненная схема алгоритма программного средства
    Начало
    Подпункт
    Выбор подпункта
    NLoad
    NSave
    Конец.
    Выбор пункта
    A
    A
    B
    B
    2 1
    1
    NCreate
    3 4
    Подпункт
    Выбор подпункта
    A
    2
    NInterpretation
    2 1
    NCompilation
    Подпункт
    Выбор подпункта
    A
    NOperations
    2 1
    NLexems
    Подпункт
    Выбор подпункта
    A
    NAuthors
    2 1
    NHelp
    3 4
    Меню
    1. Создать
    2. Открыть
    3. Сохранить
    4. Выход
    1. Файл
    2. Трансляция
    3. Таблицы
    4. Справка
    1. Компиляция
    2. Интерпретация
    1. Лексем
    2. Операций
    1. Помощь
    2. О программе
    Рисунок А.1 – Укрупненная схема алгоритма программного средства

    59
    Приложение Б
    (обязательное)
    Контрольный пример
    Рисунок Б.1 – Ввод исходных данных распознавателя
    Рисунок Б.2 – Выходные данные лексического анализатора

    60
    Рисунок Б.3 – Таблицы лексем

    61
    Приложение В
    (обязательное)
    Сообщения об ошибках
    Лексический анализатор
    {While true do write(0);
    Ошибка #0010: Неожиданный конец файла
    {a as .E22;}
    Ошибка #0013: Найдено неправильное число
    Синтаксический анализатор
    Dim a integer;}
    Ошибка #0051: Не найдена точка входа в программу
    {dim a, integer;}
    Ошибка #0052: Неправильное объявление переменной
    {if true then [ write(0) :write(1);}
    Ошибка #0067: Нарушен баланс скобок составного оператора
    Семантический анализатор
    {Dim a integer; a as 4 / 2.0;}
    Ошибка #0073: Несоответствие типов левой и правой части оператора при- сваивания
    {if (4 / 2) then write(1);}
    Ошибка #0074: Тип условия условного оператора не является "Boolean"
    { % a; for a as 0.1 to 1 do write(1)}
    Ошибка #0075: Счетчик оператора for не является целым

    62
    Приложение Г
    (обязательное)
    Фрагмент текста программы
    #define fmax(a,b) double( (a)>=(b)?a:b )
    #include
    #include
    #include
    #include using namespace std;
    // состояния диаграммы enum sost {ER, // ошибка
    V, // выход
    H, // начало
    I, // идентификатор
    C1,C2,C3, // комментарий
    M1, // < <= <>
    M2, // > >=
    N2, // двоичное число
    N8, // восьмеричное число
    N10,// десятичное число
    N16,// шестнадцатеричное число
    B, // 'B' или 'b'
    O, // 'O' или 'o'
    D, // 'D' или 'd'
    HX, // 'H' или 'h'
    E11,// 'E' или 'e'
    E12,E13,E21,E22, // порядок числа
    ZN, // знак порядка
    P1, // точка
    P2, // дробная часть
    OG};// ограничитель
    // таблицы лексем enum e_tables {
    TW=1, // таблица служебных слов
    TL=2, // таблица ограничителей
    TN=3, // таблица чисел
    TI=4};// таблица идентификаторов const int s_stack=1000,n_tables=6; char CH,stack[s_stack]; string tbl[6][s_stack];
    // внешние файлы: файл слов,
    // файл ограничителей, результирующий файл
    // лексического анализа fstream fcin("input.txt"),f_slova("tbl_slova.txt"), f_ogran("tbl_ogranichitel.txt"); ofstream f_out("result_tbl.txt"); int u_stack, // указатель на вершину стека z, // размеры таблиц s_tbl0,s_tbl1,s_tbl2,s_tbl3,s_tbl4,s_tbl5, s_res_tbl, // размер таблицы ЛА cur_res_tbl, // текущий элемент таблицы ЛА n_m_err, // количество ошибок ffree, // текущий номер свободного элемента old, // количество уже прочитанных слов окна диалога go_enter, // флаг готовности ввода в диалого- вое окно str_numb,str_otstup, res_tbl[s_stack][2], // массив ЛА stroka[s_stack]; int s_TOP; // размер таблицы операций double m,enter_numb; bool uspeh, // флаг-результат завершения
    ERR,SemERR, // флаги ошибок этапов распо- знавания ready_enter; struct TLEX{ // структура, описывающая лек- сему int n_tabl, // номер таблицы leksema; // номер в таблице
    };typedef struct TLEX tlex; static tlex lex, // обрабатываемая лексема
    СинА
    Pol_stack[s_stack]; // стек
    // структура таблицы идентификаторов struct Ttabid{ // таблица идентификаторов char id[s_stack], typid[s_stack]; bool descrid,nb; double nd; int ni;
    }; typedef Ttabid tabid; static tabid mTI[s_stack]; struct tTOP{ // структура таблицы операций char op[s_stack], t1[s_stack], t2[s_stack], t_res[s_stack];
    }; struct tTOP TOP[s_stack];
    // структура элементов struct t2types{ int i; // значение элемента типа % или $ double d; // значение элемента типа # char type; // тип элемента
    }stackI[s_stack];
    // структура номера ошибок struct tError{ int number, str_numb;
    }m_err[100]; // массив ошибок программы bool scanner(){ sost CS; gc();CS=H; do{ switch(CS){ case H:{ while( (CH==' ' || CH=='\n' || CH=='\r' )&&
    !fcin.eof() ){

    63 if(CH=='\n' || CH=='\r') str_numb++; gc();
    } if(fcin.eof() ){
    CS=ER;
    SynA::err_proc(3);
    } if(let()){ nill();add(); gc();CS=I;
    } else if(CH=='0' || CH=='1'){ nill();CS=N2; add();gc();
    } else if (CH>='2' && CH<='7'){ nill();CS=N8; add();gc();
    } else if (CH>='8' && CH<='9'){ nill();CS=N10; add();gc();
    } else if(CH=='.'){ nill(); add(); gc();
    CS=P1;
    } else if(CH=='/'){ gc(); CS=C1;
    } else if(CH=='<'){ gc();CS=M1;
    } else if(CH=='>'){ gc();CS=M2;
    } else if(CH=='}'){ out(2,2);CS=V;
    } else CS=OG; break;
    } case I:{ while(let() || digit()){ add();gc();
    } look(TW); if(z!=0){ out(1,z);CS=H;
    } else{ put(TI); out(4,z); strcpy(mTI[z-1].id,stack); CS=H;
    } break;
    } case N2:{ while(CH=='0' || CH=='1'){ add(); gc();
    } if(CH>='2' && CH<='7')
    CS=N8; else if(CH=='8' || CH=='9')
    CS=N10; else if(CH=='A' || CH=='a' || CH=='C' ||
    CH=='c' || CH=='F' || CH=='f')
    CS=N16; else if(CH=='E' || CH=='e'){ add(); gc(); CS=E11;
    } else if(CH=='D' || CH=='d'){ add; gc(); CS=D;
    } else if(CH=='O' || CH=='o')
    CS=O; else if(CH=='H' || CH=='h'){ gc(); CS=HX;
    } else if(CH=='.'){ add(); gc(); CS=P1;
    } else if(CH=='B' || CH=='b'){ add();gc();
    CS=B;
    } else if(let() )
    CS=ER; else CS=N10; break;
    } case N8:{ while(CH>='2' && CH<='7'){ add(); gc();
    } if(CH=='8' || CH=='9')
    CS=N10; else if(CH=='A' || CH=='a' || CH=='B' ||
    CH=='b' || CH=='C' || CH=='c' ||
    CH=='F' || CH=='f')
    CS=N16; else if(CH=='E' || CH=='e'){ add(); gc(); CS=E11;
    } else if(CH=='D' || CH=='d'){ add(); gc(); CS=D;
    } else if(CH=='H' || CH=='h'){ gc(); CS=HX;
    } else if(CH=='.')
    1   2   3   4   5


    написать администратору сайта