Войти в мой кабинет
Регистрация
ГОТОВЫЕ РАБОТЫ / КУРСОВАЯ РАБОТА, ПРОГРАММИРОВАНИЕ

РАЗРАБОТКА КОМПИЛЯТОРА МОДЕЛЬНОГО ЯЗЫКА ПРОГРАММИРОВАНИЯ

nemo_art 220 руб. КУПИТЬ ЭТУ РАБОТУ
Страниц: 65 Заказ написания работы может стоить дешевле
Оригинальность: неизвестно После покупки вы можете повысить уникальность этой работы до 80-100% с помощью сервиса
Размещено: 24.01.2019
В результате выполнения курсовой работы разработан компилятор для модельного языка программирования, который генерирует код ассемблера для модели учебной ЭВМ. При этом были выполнены поставленные задачи: проанализирована литература по теме решения задач компиляции; разработана формальная грамматика; реализованы лексический, синтаксический и семантический анализаторы; реализована визуализация работы программы в виде печати промежуточных результатов выполнения алгоритма.
Введение

Тема курсовой работы посвящена разработке компиляторов для языков программирования. Говоря об актуальности можно отметить, что необходимость получения навыка разработки компиляторов обусловлена появлением новых языков программирования, решающих конкретные задачи некоторой сферы экономической деятельности человека. С момента изобретения компьютера до настоящего времени проблема написания программ и их трансляции остается актуальной [2, с. 15]. Изначально последовательность действий для компьютера описывалась в виде машинных кодов, что было неудобно для человека. Стали возникать первые языки программирования, понятные человеку, и вместе с ними появилась задача перевода исходных кодов в машинный. Сегодня языки программирования высокого уровня остаются главным инструментом разработки программного обеспечения. Таким образом, актуальность темы курсовой работы определяется необходимостью получения навыков разработки компиляторов языков программирования, реализующих задачи, продиктованные временем. Цель курсовой работы состоит в разработке компилятора для модельного языка программирования. Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (на язык ассемблера) [1, с. 29]. Процесс компиляции состоит из следующих этапов [1, с. 32]: 1. Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем. 2. Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора. 3. Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки. 4. Генерация кода. Из промежуточного представления порождается код на целевом языке. Раскрывая содержание поставленной цели и учитывая этапы разработки компиляторов, можно выделить следующие задачи: – проанализировать литературу по теме исследования с целью определения наиболее удобных для реализации алгоритмов решения задач компиляции; – разработать грамматику модельного языка программирования; – описать алгоритм лексического анализа, реализованный в работе (определить особенности применения и возможные модификации классических алгоритмов); – разработать алгоритм синтаксического анализа на базе существующих в литературе; – выделить контекстно-зависимые правила, подлежащие проверке в результате семантического анализа; – визуализировать алгоритмы этапов компиляции. В качестве языка программирования, который будет использоваться для разработки программы, выбран Python 3. Выбор обусловлен удобством языка для обработки строковых значений, встроенными структурами данных и регулярными выражениями [5]. Была выбрана интегрированная среда разработки JetBrains PyCharm 2016.3.2, так как она обеспечивает удобство работы с языком Python и средства отладки.
Содержание

СОДЕРЖАНИЕ ВВЕДЕНИЕ 3 1 РАЗРАБОТКА ГРАММАТИКИ 7 1.1 Форма Бэкуса — Наура 7 1.2 Диаграммы Вирта 8 1.3 Формальная грамматика модельного языка программирования 13 2 ПРОЕКТИРОВАНИЕ И РАЗРАБОТКА КОМПИЛЯТОРА 16 2.1 Разработка алгоритмов 16 2.1.1 Разработка лексического анализатора 16 2.1.2 Разработка синтаксического анализатора 17 2.1.3 Разработка семантического анализатора 22 2.1.4 Генерация кода 22 2.2 Разработка структур данных 24 2.3 Разработка модели поведения объекта 26 3 ТЕСТИРОВАНИЕ ПРОГРАММЫ 28 3.1 Тестирование приложения 28 ЗАКЛЮЧЕНИЕ 38 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 40 ПРИЛОЖЕНИЕ А 41 ПРИЛОЖЕНИЕ Б 65
Список литературы

1. Ахо, А. Компиляторы. Принципы, технологии и инструментарий / А. Ахо, Р. Сети, Д. Ульман – М.: Вильямс, 2008. – 1177 с. 2. Вирт, Н. Построение компиляторов / Н. Вирт – М.: ДМК Пресс, 2010. – 192 с. 3. Жмакин, А. П. Архитектура ЭВМ. / А. П. Жмакин — СПб.: БХВ-Петербург, 2006. — 320 с. 4. Хантер, Р. Проектирование и конструирование компиляторов / Р. Хантер – М.: Финансы и статистика, 1984. – 232 с. 5. Documentation [Сайт]. URL: https://docs.python.org/3/ (дата обращения: 24.12.2017). ?
Отрывок из работы

2.3 Разработка модели поведения объекта Файл lexicalanalyzer.py содержит: 1. Класс LexicalParser. o Метод parse(source_string) – разбиение входной строки на список лексем. Вход: исходный код в виде строки. Выход: список объектов лексем. o Поле constants – список констант. o Поле identifiers – список идентификаторов. o Поле delimiters – список разделителей. o Поле keywords – список ключевых слов. Файл syntaxanalyzer.py содержит: 2. класс SyntaxAnalyzer: o метод parse(token_list, constants, keywords, ids, delimiters) – генерация дерева синтаксического разбора из списков лексем, констант, идентификаторов, разделителей. Вход: список лексем, список констант, список ключевых слов, список идентификаторов, список разделителей. Выход: корневой узел дерева – объект класса GrammarNode Файл semanticanalyzer.py содержит: 3. класс SemanticAnalyzer: o метод parse(tree) – проверка на семантические ошибки дерева синтаксического разбора. Вход: корневой узел синтаксического дерева. Выход: логическое значение «истина» в случае если синтаксическое дерево удовлетворяет контекстно-зависимым правилам языка или «ложь» – в противном случае. Файл asmtranslator.py содержит: 4. класс AsmTranslator: o метод to_poliz(token_list) – перевод списка лексем в ПОЛИЗ. Вход: список лексем. Выход: список лексем в польской инверсной нотации. o метод to_asm(token_list) – перевод ПОЛИЗ записи в список строк целевого языка (языка ассемблера). Вход: список лексем в польской инверсной нотации. Выход: список команд целевого языка ассемблера.
Не смогли найти подходящую работу?
Вы можете заказать учебную работу от 100 рублей у наших авторов.
Оформите заказ и авторы начнут откликаться уже через 5 мин!
Похожие работы
Курсовая работа, Программирование, 51 страница
220 руб.
Курсовая работа, Программирование, 37 страниц
210 руб.
Служба поддержки сервиса
+7(499)346-70-08
Принимаем к оплате
Способы оплаты
© «Препод24»

Все права защищены

Разработка движка сайта

/slider/1.jpg /slider/2.jpg /slider/3.jpg /slider/4.jpg /slider/5.jpg