📄Работа №131273

Тема: Генерация декларативных принтеров по грамматике в форме Бэкуса-Наура

Характеристики работы

Тип работы Бакалаврская работа
Программирование
Предмет Программирование
📄
Объем: 30 листов
📅
Год: 2016
👁️
Просмотров: 84
Не подходит эта работа?
Закажите новую по вашим требованиям
Узнать цену на написание
ℹ️ Настоящий учебно-методический информационный материал размещён в ознакомительных и исследовательских целях и представляет собой пример учебного исследования. Не является готовым научным трудом и требует самостоятельной переработки.

📋 Содержание

Введение 4
1. Постановка задачи 8
2. Обзор 9
2.1. Подходы к заданию принтеров и форматеров . . . . . . . 9
2.1.1. Задание форматеров по описанию синтаксиса . . 9
2.1.2. Форматеры, встроенные в IDE . . . . . . . . . . . 10
2.2. Grammar-Kit
3. Метод генерации декларативных принтеров 15
3.1. Определение поддеревьев и их свойств для правил грамматики
3.2. Необходимые преобразования правил грамматики . . . . 17
3.2.1. Устранение левой рекурсии . . . . . . . . . . . . . 17
3.2.2. Другие правила грамматики . . . . . . . . . . . . . 18
3.3. Поиск правил, описывающих списочных структуры . . . 18
3.4. Итоги
4. Реализация 20
4.1. Изменение архитектуры принтер-плагина . . . . . . . . . 20
4.2. Генератор принтеров в плагине Grammar-Kit . . . . . . . 21
4.3. Генерация файловой компоненты . . . . . . . . . . . . . . 22
4.4. Ограничения
5. Апробация 24
5.1. Принтер для языка While
5.2. Принтер для языка Erlang
5.3. Итоги
Заключение 29
Список литературы

📖 Введение

Интегрированные среды разработки (Integrated Development Environment, IDE) являются неотъемлемой частью современного программирования и разработки программных продуктов. Появившись в 1970-х годах, они прошли длительный путь развития и совершенствования. В наши дни типичная среда разработки включает в себя текстовый редактор, компилятор и/или интерпретатор, средства автоматической сборки, отладчик и другие инструменты. Популярными IDE для языка Java являются Eclipse1 и IntelliJ IDEA2. Они так же имеют средства для работы с системами контроля версий, рефакторинга, форматирования кода. Кроме того, существует возможность расширения функциональности этих IDE со стороны пользователей путем создания плагинов — программных компонентов, добавляющих новые возможности. В частности, плагины могут добавлять поддержку новых языков в IDE. Для разработки подобного плагина необходимо в большинстве случаев реализовать синтаксический анализатор целевого языка, который в случае IntelliJ IDEA можно получить с помощью плагина Grammar-Kit по грамматике этого языка в форме БэкусаНаура. Так же, при реализации поддержки нового целевого языка, часто возникает потребность в реализации форматера для программ на этом языке.
Задача автоматического форматирования текстов программ является классической в контексте различных языковых процессоров. Она подразумевает построение текста программы по ее синтаксическому дереву или дереву разбора. Для каждого дерева существует множество различных текстовых представлений. Так, на рис. 1 приведен пример синтаксического дерева оператора ветвления языка C, а на рис. 2 различные текстовые представления этого дерева. Программный компонент, занимающийся форматированием, мы будем называть принтером. некоторому стандарту кодирования (СК, coding convension) — набору правил и соглашений, используемых при написании кода на соответствующем языке программирования. Так, стандарт кодирования для языка Java задает расположение фигурных скобок и операторов внутри тела функции, размер и формат отступов и др.
Одним из способов форматирования программных текстов является метод, основанный на синтаксических шаблонах [7]. Под шаблоном понимаются данные, сопоставление которых с элементом синтаксического дерева дает текстовое представление этого элемента (и его потомков).
На рис. 3, а представлен шаблон форматирования, который может быть применен к дереву разбора с рис. 1. На рис. 3, б представлен результат применения шаблона к этому дереву.
Список поддерживаемых принтер-плагином языков можно расширять. Для этого необходимо создать языкозависимую прослойку между ядром платформы и представлением синтаксического дерева, полученного в результате работы анализатора. Метод, описанный в [7], позволяет генерировать такую прослойку по языкозависимому описанию компонент принтера — классов, описывающих, как форматировать соответствующие элементы синтаксического дерева. Описание каждой компоненты принтера (component) является XML-файлом. Грамматика языка, которая используется в Grammar-Kit и по которой генерируется код синтаксического анализатора, содержит большую часть необходимой информации для создания этой языкозависимой прослойки. Поэтому принтер для целевого языка можно получать по грамматике этого языка.

Возникли сложности?

Нужна качественная помощь преподавателя?

👨‍🎓 Помощь в написании

✅ Заключение

В рамках этой работы были достигнуты следующие результаты:
• Предложен метод генерации декларативных принтеров по грамматике в форме Бэкуса-Наура.
• Реализован генератор принтеров в рамках проекта Grammar-Kit9.
• Добавлена возможность интеграции сгенерированных принтеров с принтер-плагином для IDE IntelliJ IDEA.
• Получен принтер для языка While, позволяющий форматировать программы на этом языке.
• Установлено, что не по любой грамматике языка можно получить корректный принтер. Представлены требования к грамматике.
Нужна своя уникальная работа?
Срочная разработка под ваши требования
Рассчитать стоимость
ИЛИ

📕 Список литературы

1] F. Corbo, C. Del Grosso, M. Di Penta. Smart Formatter: Learning
Coding Style from Existing Source Code. –– ICSM, 2007.
[2] Klint P. A Meta-environment for Generating Programming
Environments. –– ACM Trans. Softw. Eng. Meth. 2, 2, p176-201,
1993.
[3] M.G.J. van den Brand, Visser E. Generation of Formatters for Contextfree Languages. –– ACM Trans. Softw. Eng. Meth. 5, 1, p1-41, 1996.
[4] Nielson F., Nielson H.R., Hankin C. Principles of Program Analysis. ––
Springer-Verlag New York Inc., 1999.
[5] Utkin A., Shein R., Kazakova A. Applying Genetic Algorithms to
Automatic Code Formatting. –– URL: https://blog.jetbrains.com/clion/
2015/11/applying-genetic-algorithms-to-automatic-code-formatting/
(online; accessed: 09.05.2016).
[6] Vollebregt T., Lennart C.L. Kats, Visser E. Declarative Specification
of Template-Based Textual Editors. –– Proceedings of the Twelfth
Workshop on Language Descriptions, Tools, and Applications. Article
No. 8, 2012.
[7] Подкопаев А.В., Коровянский А.Ю., Озерных И.С. Языконезависимое форматирование текстов программ на основе сопоставления с
образцом и синтаксических шаблонов. –– Научно-технические ведомости СПбГПУ 4’ (224), 2015.
[8] Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов,
языков и вычислений, 2-е изд. : Пер. с англ. –– Москва, Издательский
дом «Вильямс», 2002

🛒 Оформить заказ

Работу высылаем в течении 5 минут после оплаты.
Предоставляемые услуги, в том числе данные, файлы и прочие материалы, подготовленные в результате оказания услуги, помогают разобраться в теме и собрать нужную информацию, но не заменяют готовое решение.
Укажите ник или номер. После оформления заказа откройте бота @workspayservice_bot для подтверждения. Это нужно для отправки вам уведомлений.

©2026 Cервис помощи студентам в выполнении работ