![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
КУРСОВАЯ РАБОТА ⇐ ПредыдущаяСтр 8 из 8
1 Афанасьев А.Н. Формальные языки и грамматики: Учебное пособие. – Ульяновск: УлГТУ, 1997. – 84с. 2 Ахо А., Сети Р., Ульман Д. Компиляторы: принципы, технологии и инструменты.: Пер. с англ. – М.: Изд. дом «Вильямс», 2001. – 768с. 3 Братчиков И.Л. Синтаксис языков программирования / Под ред. С.С. Лаврова. – М.: Наука, 1975. - 262с. 4 Вайнгартен Ф. Трансляция языков программирования / Под ред. Мартынюка В.В.- М.: Мир, 1977. - 192с. 5 Вильямс А. Системное программирование в Windows 2000 для профессионалов. – СПб.: Питер, 2001. – 624с. 6 Волкова И.А., Руденко Т.В. Формальные языки и грамматики. Элементы теории трансляции. – М.: Диалог-МГУ, 1999. – 62с. 7 Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. – СПб: Питер, 2001. – 736с. 8 Грис Д. Конструирование компиляторов для цифровых вычислительных машин: Пер. с англ. – М.: Мир, 1975. – 544с. 9 Дворянкин А.И. Основы трансляции: Учебное пособие. – Волгоград: ВолгГТУ, 1999. – 80с. 10 Жаков В.И., Коровинский В.В., Фильчаков В.В. Синтаксический анализ и генерация кода. – СПб.: ГААП, 1993. – 26с. 11 Ишакова Е.Н. Теория формальных языков, грамматик и автоматов: Методические указания к лабораторному практикуму. – Оренбург: ГОУ ВПО ОГУ, 2004. – 54с. 12 Компаниец Р.И., Маньков Е.В., Филатов Н.Е. Системное программирование. Основы построения трансляторов. – СПб.: Корона принт, 2000. – 256с. 13 Льюис Ф., Розенкранц Д., Стирнз Р. Теоретические основы проектирования компиляторов. - М.: Мир, 1979. - 654с. 14 Пантелеева И.А. Методы трансляции: Конспект лекций. – Новосибирск: Изд-во НГТУ, 1998. – Ч.2. – 51с. 15 Пратт Т., Зелковиц М. Языки программирования: разработка и реализация / Под ред. А. Матросова. – СПб: Питер, 2002. – 688с. 16 Рейуорд-Смит В. Теория формальных языков. Вводный курс: Пер. с англ. – М.: Радио и связь, 1988. – 128с. 17 Серебряков В.И. Лекции по конструированию компиляторов. – М.: МГУ, 1997. – 171с. 18 Соколов А.П. Системы программирования: теория, методы, алгоритмы: Учеб. пособие. – М.: Финансы и статистика, 2004. – 320с. 19 Федоров В.В. Основы построения трансляторов: Учебное пособие. – Обнинск: ИАТЭ, 1995. – 105с. 20 Хантер Р. Проектирование и конструирование компиляторов: Пер. с англ. – М.: Финансы и статистика, 1984. – 232с. Приложение А (обязательное) Пример оформления титульного листа курсовой работы
Министерство образования и науки Российской Федерации
Федеральное агентство образования
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ “ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ”
Факультет информационных технологий
Кафедра программного обеспечения вычислительной техники и автоматизированных систем
КУРСОВАЯ РАБОТА (16 пт) по теории языков программирования и методов трансляции
Разработка компилятора модельного языка (16 пт) Пояснительная записка
ГОУ ОГУ 220400.5404.13 ПЗ Руководитель работы _______________Ишакова Е.Н. "____"______________2004г. Исполнитель студент гр. 01ПО1 _______________Ковальчук С.В. "____"______________2004г.
Оренбург 2004 Примечание – Остальные надписи размером 14 пт. Приложение Б (обязательное) Правила присвоения классификационного кода
Приложение В (обязательное) Пример оформления содержания курсовой работы
Содержание Введение........................................................................................... 3 1 Постановка задачи........................................................................ 4 2 Формальная модель задачи.......................................................... 5 3 Спецификация основных процедур и функций........................... 8 3.1 Лексический анализатор............................................................ 8 3.2 Синтаксический анализатор...................................................... 9 3.3 Семантический анализатор...................................................... 10 3.4 Генерации внутреннего представления программы............... 11 3.5 Интерпретатор программы..................................................... 12 4 Структурная организация данных............................................. 13 4.1 Спецификация входной информации...................................... 13 4.2 Спецификация выходной информации................................... 14 5 Разработка алгоритма решения задачи..................................... 15 5.1 Укрупненная схема алгоритма программного средства........ 16 5.2 Детальная разработка алгоритмов отдельных подзадач....... 18 6 Установка и эксплуатация программного средства.................. 20 7 Работа с программным средством............................................. 21 Заключение..................................................................................... 24 Список использованных источников............................................. 25 Приложение А – Текст программы............................................... 26 Приложение Б – Контрольный пример........................................ 31
Алгоритм решения задачи
Укрупненная схема алгоритма программного средства представлена на рисунке 6.1.
(обязательное) Пример оформления приложений курсовой работы
Приложение А (обязательное) Контрольный пример Результаты работы
Рисунок А.1 – Выходные данные лексического анализатора
(обязательное) Текст программы
La.h
#include <grids.hpp> #include <fstream.h> #include <string.h> #include <vector> #include <string>
using std::string; using std::vector;
// структура, описывающая лексему struct par{ long n; // номер таблицы long k; // номер в таблице };
typedef vector<string> wordtable; typedef vector<par> parvec; // состояния диаграммы enum states {SH, // начало SI, // идентификатор SN, // число (до точки) SND, // дробная часть SNS, // знак порядка SNP, // порядок SO, // ограничитель SC, // комментарий SL, // < SG, // > SS, // : SDT, // . SER, // ошибка SV}; // выход
class LA;
// класс сканер class Scanner{ public: LA * A; // связанный лексический анализатор string instr; // входная строка с исходным текстом unsigned long pos; // позиция в строке long z; // найденная позиция в таблице long errcode; // код ошибки char cur; // текущий символ string S; // строка, формирующая лексему states State; // состояние дмаграммы
int Scan(); // метод-сканер char gc(){ // считывание следующего символа if (pos >= instr.size()){ State = SV; return cur; } return (cur = instr[pos++]); } bool letter(){ // проверка символа на букву return isalpha(cur); } bool digit(){ // проверка символа на цифру return isdigit(cur); } long look(wordtable * t); // поиск лексемы S в таблице t long put(wordtable * t){ // помещение лексемы в таблицу z = look(t); if (z >= 0) return z; t->push_back(S); return (z = (t->size() - 1)); } void out(long n, long z); };
// класс лексический анализатор class LA{ public: wordtable R; // таблица служебных слов wordtable D; // таблица разделителей wordtable I; // таблица идентификаторов wordtable N; // таблица чисел parvec res; // вектор пар чисел - результат лексического анализа
Scanner S; // сканер void InTables(char *fname); // ввод таблиц R и D из файла void OutTable(TStringGrid * G, wordtable * X); // вывод таблицы в StringGrid int Scan(string s); // сканирование string ErrorMsg(int code); // сообщение об ошибке по коду string GetResult(); // сформировать результат в виде строки void OutTables(char *fname); // вывод таблиц I и N в файл void OutResult(char *fname); // вывод результата в файл };
La.cpp
#include "la.h"
// перевод строки в нижний регистр void tolower(string &s){ for (unsigned long i = 0; i < s.length(); i++) s[i] = tolower(s[i]); }
int Scanner::Scan(){ par t; pos = 0; State = SH; errcode = 0; gc(); while(State != SV && State != SER){ while(State != SV && cur != '\n' && isspace(cur)) gc(); if (State == SV) break; if (letter()){ // буква State = SI; S = cur; for(gc(); State != SV && (letter() || digit()); gc()) S += cur; //tolower(S); look(&A->R); if (z >= 0) out(0, z); else { put(&A->I); out(3, z); } } else if (digit()){ //число State = SN; S = cur; for(gc(); State != SV && (digit() || strchr("ABCDEFabcdef", cur)); gc()) S += cur; if (strchr("HhDdOoBb", cur)){ S += cur; gc(); } else if (cur == '.'){ // дробная часть State = SND; S += cur; for(gc(); State != SV && digit(); gc()) S += cur; if (cur == 'e' || cur == 'E'){ // порядок S += cur; gc(); State = SNS; if (cur == '+' || cur == '-'){ S += cur; gc(); }
State = SNP; for(; State != SV && digit(); gc()) S += cur; } } else if ((digit() || cur == '+' || cur == '-') && (S[S.length() - 1] == 'e' || S[S.length() - 1] == 'E')){ // порядок State = SNP; for(gc(); State != SV && digit(); gc()) S += cur; } put(&A->N); out(2, z); } else if (cur == '{'){ // комментарий State = SC; for(gc(); State != SV && cur != '}'; gc()); if (State == SV){ errcode = 1; break; } gc(); } else if (cur == '<'){ // < <= <> State = SL; gc(); if (cur == '=' || cur == '>'){ S = "<"; S += cur; gc(); } else S = "<"; look(&A->D); out(1, z); } else if (cur == '>'){ // > >= State = SG; gc(); if (cur == '='){ S = ">="; gc(); } else S = ">"; look(&A->D); out(1, z); } else if (cur == ':'){ // : := State = SS; gc(); if (cur == '='){ S = ":="; gc(); } else S = ":"; look(&A->D); out(1, z);
|
Последнее изменение этой страницы: 2019-06-09; Просмотров: 193; Нарушение авторского права страницы