📄Работа №58756

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

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

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

📋 Содержание

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

📖 Введение

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

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

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

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

✅ Заключение

В рамках этой работы были достигнуты следующие результаты:
• Предложен метод генерации декларативных принтеров по грамматике в форме Бэкуса-Наура.
• Реализован генератор принтеров в рамках проекта Grammar-Kit .
• Добавлена возможность интеграции сгенерированных принтеров с принтер-плагином для 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 Context- free 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ервис помощи студентам в выполнении работ