Тип работы:
Предмет:
Язык работы:


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

Работа №131273

Тип работы

Бакалаврская работа

Предмет

программирование

Объем работы30
Год сдачи2016
Стоимость4325 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
33
Не подходит работа?

Узнай цену на написание


Введение 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

Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


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