Курсовая ТЯП. КР. Теория автоматов и формальных языков
Скачать 0.99 Mb.
|
Список использованных источников 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 // состояния диаграммы 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=='.') |