Тема: Генерация декларативных принтеров по грамматике в форме Бэкуса-Наура
Характеристики работы
Закажите новую по вашим требованиям
Представленный материал является образцом учебного исследования, примером структуры и содержания учебного исследования по заявленной теме. Размещён исключительно в информационных и ознакомительных целях.
Workspay.ru оказывает информационные услуги по сбору, обработке и структурированию материалов в соответствии с требованиями заказчика.
Размещение материала не означает публикацию произведения впервые и не предполагает передачу исключительных авторских прав третьим лицам.
Материал не предназначен для дословной сдачи в образовательные организации и требует самостоятельной переработки с соблюдением законодательства Российской Федерации об авторском праве и принципов академической добросовестности.
Авторские права на исходные материалы принадлежат их законным правообладателям. В случае возникновения вопросов, связанных с размещённым материалом, просим направить обращение через форму обратной связи.
📋 Содержание
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
Список литературы
📖 Введение
Задача автоматического форматирования текстов программ является классической в контексте различных языковых процессоров. Она подразумевает построение текста программы по ее синтаксическому дереву или дереву разбора. Для каждого дерева существует множество различных текстовых представлений. Так, на рис. 1 приведен пример синтаксического дерева оператора ветвления языка C, а на рис. 2 различные текстовые представления этого дерева. Программный компонент, занимающийся форматированием, мы будем называть принтером. некоторому стандарту кодирования (СК, coding convension) — набору правил и соглашений, используемых при написании кода на соответствующем языке программирования. Так, стандарт кодирования для языка Java задает расположение фигурных скобок и операторов внутри тела функции, размер и формат отступов и др.
Одним из способов форматирования программных текстов является метод, основанный на синтаксических шаблонах [7]. Под шаблоном понимаются данные, сопоставление которых с элементом синтаксического дерева дает текстовое представление этого элемента (и его потомков).
На рис. 3, а представлен шаблон форматирования, который может быть применен к дереву разбора с рис. 1. На рис. 3, б представлен результат применения шаблона к этому дереву.
Список поддерживаемых принтер-плагином языков можно расширять. Для этого необходимо создать языкозависимую прослойку между ядром платформы и представлением синтаксического дерева, полученного в результате работы анализатора. Метод, описанный в [7], позволяет генерировать такую прослойку по языкозависимому описанию компонент принтера — классов, описывающих, как форматировать соответствующие элементы синтаксического дерева. Описание каждой компоненты принтера (component) является XML-файлом. Грамматика языка, которая используется в Grammar-Kit и по которой генерируется код синтаксического анализатора, содержит большую часть необходимой информации для создания этой языкозависимой прослойки. Поэтому принтер для целевого языка можно получать по грамматике этого языка.
✅ Заключение
• Предложен метод генерации декларативных принтеров по грамматике в форме Бэкуса-Наура.
• Реализован генератор принтеров в рамках проекта Grammar-Kit9.
• Добавлена возможность интеграции сгенерированных принтеров с принтер-плагином для IDE IntelliJ IDEA.
• Получен принтер для языка While, позволяющий форматировать программы на этом языке.
• Установлено, что не по любой грамматике языка можно получить корректный принтер. Представлены требования к грамматике.



