77208

Поддержка языка Lisa в среде Eclipse

Курсовая

Информатика, кибернетика и программирование

В компании Parallels ведётся разработка продукта StellArt IDE – среда программирования на основе Eclipse для языка Lisa. Я участвую в разработки данного продукта. Продукт разрабатывается по технологии Scrum, так что каждый месяц в течение всего периода разработки поставляется...

Русский

2015-02-02

293 KB

1 чел.

Санкт-Петербургский Государственный Университет

Математико-механический факультет

кафедра системного программирования

Поддержка языка Lisa в среде Eclipse

Курсовая работа  студента 445 группы

Алеева Константина

Руководитель

Иванов А.В.

Санкт-Петербург

2009 год


Оглавление

[1] Оглавление

[2] Введение

[3] Постановка задачи

[4] Язык Lisa

[5] Среда Eclipse

[6] Техническое описание

[6.1] Форматирование исходного кода

[6.2] Рефакторинг исходного кода

[6.3] Помощник по коду

[7] Заключение

[8] Литература


Введение

Информационные технологии как отрасль не стоят на месте. Каждый год придумываются и разрабатываются новые технологии и языки программирования. Для новых языков требуются новые инструменты программирования. Возникает, ставшая уже классической задачей системного программирования, задача разработки среды программирования для нового языка. Задачу именно такого рода я выбрал в качестве своей курсовой работы. Основу курсовой работы составляет задача поддержки языка Lisa в среде Eclipse.


Постановка задачи

В компании Parallels ведётся разработка продукта StellArt IDE – среда программирования на основе Eclipse для языка Lisa. Я участвую в разработки данного продукта. Продукт разрабатывается по технологии Scrum, так что каждый месяц в течение всего периода разработки поставляется готовая версия продукта с постепенно наращивающейся функциональностью. В течение этого учебного года в процессе работы передо мной были поставлены следующие задачи:

  •  добавление возможности форматирования исходного кода;
  •  добавление возможности рефакторинга исходного кода;
  •  добавление так называемого помощника по коду.  


Язык Lisa

Язык Lisa является ядром технологии StellArt для разработки информационных систем и успешно используется в компании Parallels для разработки проекта Parallels Business Automation.

Язык описания информационных систем Lisa предназначен для описания структуры проекта информационной системы (данных, способов обработки и представлений), обеспечения целостности и непротиворечивости программных интерфейсов (API), описания функционального интерфейса, документирования, поддержки жизненного цикла и переиспользования проектов.

В основе Lisa лежит оригинальный декларативный язык описания структуры информационной системы, который включает в себя описание хранимых системой структур данных и их взаимосвязей, декларации методов для работы с этими структурами, описания внешнего представления хранимых и вычисляемых данных, а также способов и прав доступа к данным для различных категорий пользователей ИС. Упрощенная схема статической генерации кода изображена на рис. 1.

Исходный текст проекта (Lisa-описание) компилируется,  в результате чего порождаются тексты SQL-скриптов для создания схемы базы данных проекта (БД), тексты служебных и стандартных методов сервера приложений (Стандартные функции), описание структуры графического пользовательского интерфейса (Функционал ГИП), а также база данных разграничения доступа к ресурсам системы и некоторые другие вспомогательные файлы.

Затем на основании файлов с описанием функционала ГИП при помощи программы UIL (User Interface Language) генерируются тексты Java – программ клиентской части ИС. Скомпилировав все полученные при генерации C++ тексты (при помощи сгенерированного же Make файла), можно получить действующий прототип сервера приложений разрабатываемой ИС. Для окончательной доводки системы необходимо написать на C++ тела всех продекларированных ранее в Lisa-программе функций (Прикладные функции).

Рис 1. Схема статической кодогенерации.


Среда Eclipse

Eclipse Foundation – это сообщество программного обеспечения с открытым кодом, чьи проекты сфокусированы на создание и улучшение расширяемой платформы (Eclipse Platform), а так же основных инструментов к ней для разработки, запуска ПО и управления всеми этапами его жизненного цикла. Приложения – плагины (plugins) – строятся на базе этой платформы, они  получаются полностью интегрированными  в единую универсальную среду разработки. Eclipse включает в себя более 60 проектов с открытым кодом. Поучаствовать в них или стартовать новый проект может любой желающий. Особым плюсом этих проектов является их кросс-платформенность (они написаны на Java) и свободная лицензия EPL. Большой популярностью пользуется среда разработки Java (Eclipse JDT). Сотни компаний создают на основе Eclipse свои коммерческие продукты.

Реализация Eclipse заслуживает особого внимания. Фактически это проект не только с открытым кодом, но и с открытой архитектурой. Его основу составляют три субпроекта:

  •  Platform – базовые службы;
  •  JDT (Java Development Tools) – инструменты для разработки на Java;
  •  PDE (Plug-in Development Environment) – механизм расширения возможностей.

Субпроекты основываются на документированных стандартизованных интерфейсах и благодаря им взаимодействуют друг с другом – это обеспечивает относительную независимость и возможность замены одних компонентов другими (например, JDT – на CDT (C/C++ Development Tools), в результате чего Eclipse превратится в IDE для C/C++).

Platform является центральным звеном архитектуры Eclipse, без которого невозможно существование всего проекта. Он предоставляет ключевые службы, на их основе строятся и функционируют остальные компоненты, – к таковым относятся Workspace (элементы рабочей области), Workbench (базовый пользовательский интерфейс), Help (справочная подсистема), Team (поддержка командной работы), Debug (служба отладки), Update (поддержка обновления). При этом сам Platform базируется на среде исполнения Platform Runtime, которая считается ядром всей системы. Фактически можно утверждать, что все элементы Eclipse являются подключаемыми модулями (plug-in) к Platform Runtime.

PDE (Plug-in Development Environment) – субпроект, обеспечивающий разработку и подключение расширений для Eclipse. Поскольку весь Eclipse фактически состоит из подобных модулей, PDE можно определить как средство, позволяющее создать Eclipse в самом Eclipse.

Расширяемость, пожалуй, самая сильная сторона Eclipse, которая и обеспечивает ряд серьезных технологических преимуществ данному проекту.

Реализация поддержки расширений в Eclipse поистине впечатляет – по сути, проект является самым настоящим конструктором, из которого можно собрать IDE для какого угодно языка и какой угодно платформы. Мало того, при этом речь не обязательно должна идти именно об IDE (т. е. инструментарии собственно программиста) – на официальном сайте eclipse.org в разделе проектов можно найти множество весьма «нетрадиционных» способов применения Eclipse.

Следует признать, что в случае Eclipse гибкость вовсе не подразумевает дополнительных сложностей. Создание расширений в Eclipse – задача достаточно тривиальная и к тому же прекрасно документированная. Описание модуля задается в файле-дескрипторе (plug-in descriptor), имеющем формат XML, а непосредственное использование обеспечивается специальными точками расширения (extension points), благодаря которым осуществляется привязка к определенной функциональности. При этом plug-in-модули могут как подключаться к известным точкам расширения, так и объявлять собственные.

Помимо прочего, интересной особенностью является поддержка фрагментов расширений (plug-in fragment), зависимых от основного модуля элементов, которые могут разрабатываться отдельно. С их помощью, например, удобно осуществлять локализацию различных компонентов, и участие в этом процессе оригинального разработчика совсем не обязательно.

Техническое описание

Разработка IDE для языка Lisa ведется на основе среды Eclipse c помощью создания плагинов для этой среды. Выбор такого пути разработки обусловлен множеством преимуществ, которыми обладает среда Eclipse. Вот основные из них:

  •  Eclipse среда разработки не только с открытом кодом, но и с открытой архитектурой;
  •  кросc-платформменность среды;
  •  свободная лицензия EPL;
  •  разработка плангинов для Eclipse проста и хорошо документирована.

Более подробно об этих и других преимуществах среды Eclipse было рассказано в предыдущем разделе.

Проделанной мной работу можно разделить на три части:

  •  добавление возможности форматирования исходного кода;
  •  добавление возможности рефакторинга исходного кода;
  •  добавление так называемого помощника по коду.  

Далее каждая часть будет рассмотрена более подробно.

Форматирование исходного кода

Одной из самых широко используемых, особенно в промышленной разработке, возможностей IDE является возможность форматирования исходного кода. Зачастую от разработчика требуется написания кода в некотором определенном стиле, для единообразия кода во всём проекте и более быстрого и простого его понимания. Именно для таких целей в IDE вводится возможность форматирования исходного кода (Code Formatter).

Данную задачу следует разделить на две подзадачи. Первая – собственно разработка и написание самого алгоритма форматирования кода на основе настроек, принятых пользователем. Вторая – создание удобного графического интерфейса для манипуляции этими настройками.

Придуманный и реализованный мной в курсовой работе алгоритм основан на обходе модели представления Lisa-файла (Lisa source model). Параллельно с обходом модели алгоритму приходится работать непосредственно с текстовым содержимым Lisa-файла. Это связано с тем, что в процессе работы плагина не строится полное синтаксическое дерево (full abstract syntax tree), а лишь модель  представления файла, которая содержат не полную информацию о текстовом файле. Такое решение существенно уменьшает количество оперативной памяти, требуемой для работы плагина. Стоит заметить, что модель представления Lisa-файла разработана с помощью технологии EMF (Eclipse Modeling Framework). Данный проект разработан на основе Eclipse и служит для работы с произвольными структурированными моделями, позволяя лишь только описать саму структуру модели. По описанной структуре модели EMF может сгенерить java-код данной модели. В процессе работы над алгоритмом форматирования модель представления Lisa-файла была существенно дополнена.

Для создания графического интерфейса для манипуляции настроек были использованы точки расширения org.eclipse.ui.preferencePages и org.eclipse.ui.propertyPages:

<extension point="org.eclipse.ui.preferencePages">

   <page

       category="com.parallels.platform.ide.ui.preferences

                                                    .StellartPreferencePage"

       class="com.parallels.platform.ide.ui.internal.preferences.formatter

                                               .CodeFormatterPreferencePage"

       id="com.parallels.platform.ide.ui.preferences

                                               .CodeFormatterPreferencePage"

       name="Code Formatter">

   </page>

</extension>

<extension point="org.eclipse.ui.propertyPages">

   <page

       category="com.parallels.platform.ide.ui.propertyPages

                                                   .StellartPreferencePage"

       class="com.parallels.platform.ide.ui.internal.preferences.formatter

                                              .CodeFormatterPreferencePage"

           

       id="com.parallels.platform.ide.ui.propertyPages

                                              .CodeFormatterPreferencePage"

       name="Code Formatter">

       <enabledWhen>

           <adapt type="org.eclipse.core.resources.IProject">

               <test property="org.eclipse.core.resources.projectNature"  

               value="com.parallels.platform.ide.core.platform_ide_nature"/>

           </adapt>         

       </enabledWhen>

   </page>

</extension>

Первая точка расширения предназначена для создания страницы настроек применяемых ко всему рабочему пространству (Workspace), вторая для создания настроек применяемых к конкретному проекту в рабочем пространстве.

Рис. 2 Страница настроек форматирования кода.

Далее для страницы настроек был реализован диалог, аналогичный диалогу, применяемому в плагинах JDT и CDT:

Рис. 3 Диалог содержащий полный набор настроек для форматирования кода

В заключение, в текстовом редакторе Lisa-файлов была добавлена специальная акция для форматирования исходного кода.

Рефакторинг исходного кода

Не менее важной возможностью IDE является возможность рефакторинга исходного кода. В процессе работы над курсовой мной была реализована возможность переименования объявленных Lisa-классов, атрибутов, методов и других синтаксических конструкций языка Lisa. При реализации данного вида рефакторинга использовалась библиотека LTK (Language Toolkit). LTK – библиотека, используемая для автоматического рефакторинга в IDE основанных на среде Eclipse. Наличие такой библиотеки сещественно упростило разработку данного вида рефакторинга. Как говорилось в разделе описания языка Lisa,   для окончательной доводки системы необходимо написать на C++ тела всех продекларированных ранее в Lisa-программе методов. Это наложило следующее условие на переименование объявленных Lisa-методов: при переименования LISA-метода должен также переименовываться соответствующий C++ метод.  Для реализации этой возможности потребовалось интеграция написанного мной рефакторинга с рефакторингом разработанным в CDT.

Помощник по коду

В JDT, CDT и других IDE на основе Eclipse внедрен помощник по коду (Code Assist). При разработки IDE для языка Lisa было решено внедрить аналогичную функцию. Суть помощника заключается в том, что бы подсказывать возможные синтаксические конструкции языка, которые могут быть написаны в том месте в коде программы, где вызван помощник. Если в месте вызова возможно написание идентификатора (например, идентификатора Lisa-класса), то помощник предлагает так же все возможные уже задекларированные идентификаторы для данного места в коде.

Алгоритм основан на том, что при вызове помощника происходит парсинг файла до того места где вызван помощник. Это нужно для того, чтобы парсер смог выдать все возможные правила грамматики, которые применимы в месте вызова. Эти правила и предлагает помощник. Далее если среди правил встречается возможность написание идентификатора, то согласно тому правилу и модели представления Lisa-файла, определяется список всех возможных идентификаторов, которые можно написать в данном месте в Lisa-программе.

Рис. 4 Демонстрация работы помощника по коду.

Стоит отметить, что для написания парсера Lisa-файлов, использовалась утилита yacc. Которая позволяет сгенерить код парсера по описанной в некой стандартной форма грамматике языка.


Заключение

Поставленные в течение учебного года задачи для курсовой работы были выполнены.

В проекте были реализованы следующие возможности:

  •  возможность форматирования исходного кода на языке Lisa;
  •  возможность переименования объявленных идентификаторов (Lisa-классов, атрибутов, методов и т.д.);
  •  возможность использования помощника по коду.

В настоящее время работа над проектом продолжается, ставятся задачи по расширению функциональности IDE.


Литература

  1.  http://www.eclipse.org
  2.  http://www.eclipse.org/emf
  3.  http://www.eclipse.org/articles/Article-LTK/ltk.html
  4.  http://itc.ua/node/25777
  5.  http://www.parallels.com/products/automation/business/


 

А также другие работы, которые могут Вас заинтересовать

58577. Разработка технологического процесса изготовления вала-шестерни 651 KB
  В процессе разработки технологии изготовления детали решаются следующие вопросы: выбор способа получения заготовки, металлорежущего оборудования; режущего и измерительного инструментов; назначение припусков на обработку, режимов резания и норм времени; проектирование оригинального и модифицированного станочного или сборочного приспособления.
58578. Классно-урочная система 122.5 KB
  Уроки чередовались с переменами. Выделены несколько типов уроков: комбинированные или смешанные уроки уроки по ознакомлению с новыми фактами конкретными явлениями или имеющие целью осмысление и усвоение обобщений уроки закрепления и повторения знаний уроки имеющие основной целью обобщение и систематизацию изученного уроки выработки и закрепления умений и навыков уроки проверки знаний и разбора проверочных работ. Даже контрольные уроки здесь довольно часто включают в себя другие виды работы: устное сообщение материала...
58579. Що таке скульптура? Види скульптури. Порівняльний аналіз розмірів і пропорцій форм та їх складових частин. Ліплення котика (пластилін) 43 KB
  Що таке скульптура Види скульптури. Не менш цікавий вид образотворчого мистецтва скульптура: памятники видатним людям і скульптурні групи прикрашають вулиці та майдани фонтани парки та сквери окремі громадські будинки також прикрашені скульптурами.
58580. Конституция России 51 KB
  Цель урока: учащиеся продолжают работу по формированию основ правовой культуры закреплению знаний учащихся о государственном устройстве страны о трех ветвях власти. Правила игры: Право ответа игрок получает только от капитана.
58581. Свобода в жизни человека 72 KB
  Воспитательная: подвести учащихся к пониманию что свобода является непреходящей ценностью в любом обществе раскрыть ее значимость в жизни каждого человека; продолжить формирование ценностных ориентаций учащихся путем обсуждения альтернативных моделей поведения человека в ситуациях выбора...
58582. Развитие общества 110.5 KB
  Цель: сформировать у учащихся комплекс знаний о развитии общества. Задачи: Учебная: усвоение учащимися сведений о развитии общества глобальных проблемах человечества понятий прогресс регресс реформа революция глобализация. 2 назовите основные сферы жизни...
58584. Политическая деятельность 64.5 KB
  Так что такое политика Что представляет собой политическая деятельность Кто и как участвует в ней Давай те исследуем эти вопросы. Тема урока Политическая деятельность. Мы рассмотрим следующие вопросы: Политика как деятельность Власть и властная деятельность Легитимность власти.
58585. УРОК ОБЩЕСТВОЗНАНИЯ В НАЧАЛЬНОЙ ШКОЛЕ И ПОДГОТОВКА К НЕМУ УЧИТЕЛЯ 100.5 KB
  Комбинированный урок включает в себя следующие компоненты: организационный момент; проверка знаний и умений предыдущего урока; повторение тех понятий фактов имен и явлений которые тесно связаны с содержанием нового урока; переход к изучению нового материала мостик от известного к неизвестному...