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/


 

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

71338. История России 8-9 века 246.5 KB
  Главное занятие восточных славян – земледелие. Существовали 2 способа обработки земли: подсечно-огневое и пашенное земледелие. Занимались также ремеслом, огородничеством, охотой, рыболовством, торговлей. Главный торговый партнер – Византия.
71339. ГІСТОРЫЯ БЕЛАРУСІ 1.83 MB
  «Гiсторыя» – у перакладзе з грэчаскай мовы – апавяданне аб мiнулых падзеях. Яе заснавальнікам лічыцца Герадот (484–425 гг. да н. э.). Яна вывучае ход i заканамернасцi развiцця чалавечага грамадства ў мiнулым. Аб’ектам яе пазнання з’яўляецца працэс і вынікі жыццядзейнасці людзей у сацыяльнай, матэрыяльнай і духоўнай сферах.
71340. СССР В ПЕРИОД ВЕЛИКОЙ ОТЕЧЕСТВЕННОЙ ВОЙНЫ 143 KB
  Основное население страны планировалось превратить в рабов, а саму Россию – в аграрно-сырьевой придаток Запада. Такие планы не оставили народу другой альтернативы, кроме борьбы. В этой войне речь шла не столько о борьбе нацизма и большевиков, сколько о судьбе российской государственности.
71341. Начало царствования Ивана IV. Реформы Избранной рады 76.5 KB
  На долю сына Ивана III Василия III (1505-1533) досталась нелегкая задача завершить начатое отцом объединения страны. И он блестяще осуществил эту задачу. Именно при нем были присоединены к Москве Псков, Смоленск и Рязанское княжество (завершение объединения русских земель).
71342. Понятие МЧП 204 KB
  МЧП -– система правовых норм регулирующая отношения вытекающие из гражданского оборота носящие интернациональный характер в которой одной из сторон является лицо попадающее под действие частного права. МЧП –- комплексная правовая система объединяющая нормы национального...
71343. Восточные славяне в древности 1 MB
  В СССР речь шла о возобновлении индустриализации начавшейся еще в царской России. Каковы были цели индустриализации 1 Преодоление технико-экономической отсталости СССР; 2 Ликвидация отсталости аграрного сектора экономики; 3 Превращение страны из аграрной в индустриальную...
71344. Восток — Запад — Россия. Зарождение и развитие мировой экономики 211 KB
  Отличительной чертой такого подхода стала углубленная характеристика не только экономических, но и социальных отношений в обществе в разные исторические периоды. Историко-хронологический и технологический подходы дают возможность обобщить социально-экономический опыт человеческой цивилизации...
71346. Периферийные устройства ЭВМ 1.1 MB
  Учебное пособие «Администрирование локальных вычислительных сетей» по дисциплине ЭВМ и телекоммуникации» предназначено для студентов Псковского государственного политехнического института специальности 220100 «Вычислительные машины, комплексы, системы и сети очно-заочной форм обучения.