Построение рабочего места Ruby on Rails-разработчика на базе IDE Netbeans

09 декабря 09:29

Design of Integrated Development Environment for Ruby on Rails Programmers Based on Netbeans Platform

УДК 004.4’22.

22.05.2017
 

Выходные сведения:
Шелудько С.Д., Науменко А.М., Радыгин В.Ю. Построение рабочего места Ruby on Rails-разработчика на базе IDE Netbeans // ИТпортал, 2017 №2 (17). URL: http://itportal.ru/science/tech/postroenie-rabochego-mesta-ruby-on-/

Авторы:
Шелудько С.Д.1, Науменко А.М.2, Радыгин В.Ю.3

1 студент 4-го курса бакалавриата по направлению «Информационные системы и технологии», ФГАОУ ВО Национальный исследовательский ядерный университет «МИФИ», Москва, Российская Федерация (115409, г. Москва, Каширское ш., 31), e-mail: sheludko.serg@gmail.com.

2 студент 4-го курса бакалавриата по направлению «Информационные системы и технологии», ФГАОУ ВО Национальный исследовательский ядерный университет «МИФИ», Москва, Российская Федерация (115409, г. Москва, Каширское ш., 31), e-mail: naumenko.mephi@gmail.com.

3 к.т.н., доцент кафедры финансового мониторинга, ФГАОУ ВО Национальный исследовательский ядерный университет «МИФИ», Москва, Российская Федерация (115409, г. Москва, Каширское ш., 31), e-mail: vyradygin@mephi.ru.

Authors:
Sheludko S.D.1, Naumenko A.M.2, Radygin V.Yu.3

1 fourth year BA-student, specialty “Information systems and technologies”, National Research Nuclear University MEPhI (Moscow Engineering Physics Institute), Moscow, Russian Federation (115409, Moscow, Kashirskoe shosse, 31), e-mail: sheludko.serg@gmail.com.

2 fourth year BA-student, specialty “Information systems and technologies”, National Research Nuclear University MEPhI (Moscow Engineering Physics Institute), Moscow, Russian Federation (115409, Moscow, Kashirskoe shosse, 31), e-mail: naumenko.mephi@gmail.com.

3 Ph.D., assistant professor of dept. Financial Monitoring, National Research Nuclear University MEPhI (Moscow Engineering Physics Institute), Moscow, Russian Federation (115409, Moscow, Kashirskoe shosse, 31), e-mail: vyradygin@mephi.ru.

Ключевые слова:
Ruby on Rails, HAML, IDE NetBeans, ANTLR, Java, плагин

Keyword:
Ruby on Rails, HAML, IDE NetBeans, ANTLR, Java, plug-in

Аннотация: 
Данная статья посвящена исследованию вопроса формирования рабочей среды для разработчика веб приложений на базе фреймворка Ruby on Rails. Выполнен подробный анализ существующих технологий и программных продуктов. Показано отсутствие или экономическая несостоятельность готовых полноценных решений. Обосновано преимущество расширения среды разработки NetВeans для формирования готово рабочего места Ruby on Rails программиста. Показано, что создание полноценного решения требуется интеграция в данный фреймворк дополнительных языковых модулей: модуля языка разметки HAML и модуля библиотеки JBuilder. Выполнен подробный анализ существующих программных средств автоматического построения лексического и синтаксического анализаторов языка. Доказано преимущество технологии ANTLR и объектно-ориентированного языка программирования Java для решения поставленной задачи. Рассмотрены все необходимые конструкции, задействованные при разработке языковых модулей для языка разметки HAML и библиотеки JBuilder. На примере создания языкового модуля HAML раскрыты основные технологические этапы проектирования собственных языковых дополнений для среды разработки NetBeans. Показана структура классов готового лексического анализатора, используемого для синтаксической раскраски, автодополнения, автоматического выравнивания и анализа ошибок HAML программ. Рассмотрен пример функционирования готового языкового HAML модуля. Описано преимущество полученного полноценного программного решения. Подчёркнута возможность применения отработанных технологий для решения аналогичных задач. Отмечено экономическое преимущество исследованных технологий, достигаемое за счёт использования бесплатного программного обеспечения.

Annotation: 
This article is devoted to design of integrated development environment for web-developers, whose site works based on framework Ruby on Rails. A detailed analysis of modern integrated development environments and attendant technologies is performed. Lack or economic inexpediency of existing programming products is shown. The advantages of using of Netbeans Platform for design new Integrated Development Environment for Ruby on Rails is proved. Two main directions of solving this problem are revealed. The first point is HAML language module. The second point is JBuilder syntax highlighting module. A detailed analysis of tools for automatic design of lexical analyzers and parsers is performed. The advantages of using ANTLR technology and Java object-oriented language are shown. All necessary constructions applied for development of HAML language and JBuilder syntax highlighting modules are described. By example of HAML language module the main technological stages are shown. Advantages of the created product are disclosed. Example of using HAML language module as a part of fully-functionality integrated development environment is shown. Economic benefits of using only free soft are emphasized.

Построение рабочего места Ruby on Rails-разработчика на базе IDE Netbeans

Введение

На сегодняшний день разработка крупной коммерческой информационной системы невозможна без использования фреймворков или аналогичных им программных систем. Для каждого из популярных на сегодняшний день языков построения веб-ориентированных приложений существует целый спектр подобных средств. Например, высокую востребованность имеют следующие фреймворки: ASP.NET MVC Framework для языков программирования семейства .NET (таких, как C#, Visual Basic.NET, JScript.NET), Django для скриптового языка Python, Spring Framework для языка программирования Java, AngularJS для языка JavaScript и другие.

В последнее десятилетие особо активное развитие демонстрирует фреймворк Ruby on Rails [1]. Согласно статистике Австралийского независимого агентства BuiltWith [2], фреймворк Ruby on Rails в той или иной мере лежит в основе десятой части самых посещаемых сайтов Интернета. Работы различных авторов подтверждают популярность данной системы, как за рубежом, так и в нашей стране. Например, перспективы использования Ruby on Rails в своих статьях рассматривают П. Вагстрём (P.  Wagstrom) [3] и Д.Ю. Куприянов [4, 5], Вишванатан (Viswanathan) [6].

Особую популярность данной системы обуславливают три фактора: полноценная реализация MVC (Model-View-Controller) шаблона проектирования, базирование на современном языке программирования Ruby и универсальная поддержка взаимодействия с большинством популярных систем управления базами данных, включая как поддержку реляционных баз данных на уровне объектно-реляционного преобразователя (например, PostgreSQL, Oracle, MySQL и т.д.), так и поддержку NoSQL систем (например, MongoDB).

Системы, базирующиеся на шаблоне проектирования MVC, обычно не ограничены одним языком разработки, а объединяют в своей основе целый пакет языков, начиная с языков разметки и заканчивая языками низкого уровня. В частности, крупное коммерческое Ruby on Rails приложение может включать в себя комбинацию языков SQL, Ruby, С (или C++) на уровне моделей, комбинацию языков Ruby и C (или C++) на уровне контроллеров, и комбинацию целой россыпи языков на уровне представлений (интерфейсной части), в том числе языки: Ruby, ERB, HAML, JavaScript, Sass, CSS, SCSS, CoffeeScript, LaTeX, MarkDown, YAML и т.д. Такое разнообразие программных средств накладывает серьёзные квалификационные требования не только на самих разработчиков, но и на  их рабочее место. Использование несвязанных инструментов, таких как: текстовый редактор, компилятор, отладчик, система контроля версий и т.д. в такой ситуации невозможно. Потери большого количества времени, а, главное, концентрации разработчика, обусловленные переключением между компонентами, приводят к снижению общей эффективности программистов, как отдельных производственных единиц, так и целых трудовых коллективов. Оптимизировать процесс реализации проекта позволяет полноценное рабочее место, сформированное на основе интегрированной среда разработки (IDE).

Интегрированные среды разработки в последнее время стали неотъемлемой частью рабочего процесса как разработчиков программного обеспечения, так и специалистов других областей науки и промышленности. Данная тематика подробно раскрыта в работах многих авторов. Например Х. Танк (H. Tunc) в своей работе [7] рассматривает вопрос разработки веб-ориентированного IDE для событийных приложений. Д. Лиу (D. Liu) исследует вопрос разработки IDE для микросервисного программирования [8]. Ф Кремона (F. Cremona) в своём исследовании [9, 20, 21] раскрывает особенности использования IDE при проектировании элементов приложений, использующих Mock-up-технологии.

Большое внимание уделено интегрированным средам разработки и среди учёных других научных областей. Например, С Крупицер (C. Krupitzer) [10] показывает использование IDE для проектирования электронных схем, Л.-Е.И. Куадрадо (L.-E.I. Cuadrado) [11] – для обучения роботов, Б. Шётц (B. Schätz), [12] – для решения физических задач, С. Грун (Grun, C.) [13] – для решения задач нанотехнологий. Таким образом, вопрос использования интегрированных сред разработки для формирования рабочих мест разработчика и исследователя на сегодняшний день крайне актуален.

 С другой стороны, сегодня существует большое число программных продуктов предназначенных для обеспечения нужд  Ruby on Rails-девелоперов. Все они в той или иной мере претендуют на роль полноценной среды разработки, формирующей рабочей место веб-программиста. К сожалению, все они обладаю рядом существенных недостатков. В частности, к таким программным продуктам можно отнести бесплатные системы NetBeans от компании Oracle и Aptana Studio (на основе Eclipse), редактор Atom с набором Ruby on Rails плагинов и коммерческую систему RubyMine от компании JetBrains.

RubyMine является платной средой разработки и ориентирована исключительно на Ruby on Rails. Данная однобокость этого продукта не даёт возможности использовать его в проектах совмещающих технологию Ruby on Rails с другими современными технологиями, такими как, Java-фреймворки или C++-приложения. Более того, проприетарность данного продукта не позволяет крупным компаниям осуществить её доработку для собственных нужд.

С бесплатными продуктами также есть ряд проблем. Aptana Studio больше не поддерживается на должном уровне. Редактор Atom не является средой разработки в своей основе, что затрудняет как работу с ним, так и его дальнейшее развитие. NetBeans не поддерживает ряд современных Ruby on Rails технологий, так как начиная с версии 7.0 модуль поддержки языка Ruby и фреймворка Ruby on Rails не входит в состав его стандартной сборки, а предоставляется в виде плагина.

Таким образом, можно смело говорить о необходимости создания полноценного рабочего места Ruby on Rails-разработчика и его востребованности в мире.

Из рассмотренных существующих систем некоторые являются универсальными и широко используются программистами при создании приложений на основе множества языков отличных от языка Ruby. Наибольший интерес среди них представляет среда разработки NetBeans, которая  является одной из наиболее востребованных систем в мире [14]. При этом данная IDE является кросс-платформенной и поддерживает многие языки программирования и веб-технологии, используемые одновременно с Ruby on Rails в крупных проектах. Причём одной из ключевых особенностей этой среды является возможность написания собственного плагина для добавления ещё не поддерживаемого языка.

Всё вышесказанное показывает возможность использования NetBeans как основы для построения полноценного рабочего места Ruby on Rails-разработчика, но не устраняет её недостатков. Среди них можно выделить два основных: отсутствие поддержки языка разметки HTML-представлений HAML и отсутствие поддержки средства формирования JSON-представлений JBuilder. Разработка данных языковых модулей и их последующая интеграция с уже существующими модулями поддержки языка Ruby и фреймворка Ruby on Rails позволит значительно повысить востребованность IDE NetBeans в среде Ruby on Rails разработчиков и даст возможность сформировать полноценное рабочее место современного веб программиста.

Актуальность задачи определила необходимость разработки данных языковых модулей средствами программистов НИЯУ МИФИ.

Разработка языкового модуля для IDE NetBeans

Для реализации языковых модулей NetBeans были построены программные реализации  лексического и синтаксического анализаторов [15]. Программная реализация должна была быть выполнена на базовом языке IDE NetBeans (Java) и встроена в полноценный плагин-проект. Особенную сложность при разработки данных плагинов определяет тот факт, что и HAML и JBuilder являются композициями нескольких языков. HAML по своей сути является композицией трёх языков Ruby, HTML и новых языков элементов, задаваемых самим HAML. JBuilder – это комбинация Ruby и новых элементов, определяемых самим JBuilder. Так как языки похоже, но HAML сложнее по своей структуре, то далее будем рассматривать только модуля для языка HAML. Схема взаимодействия лексического и синтаксического анализаторов показана на рисунке 1.

Рис. 1. Принципиальная схема анализа

 

Существуют два способа создания лексического и синтаксического анализаторов: самостоятельное описание алгоритма его работы на языке программирования и автоматическая генерация программного кода на основе формального описания языка с помощью специализированных программных средств. Для написания плагина поддержки языка HAML для NetBeans более приемлема автоматическая генерация анализатора, так как его самостоятельная разработка – процесс излишне трудоёмкий, затраты на который не оправдывают потенциальной выгоды (пользы) от разработанного языкового модуля. В качестве программного средства генерации синтаксического и лексического анализаторов использовался генератор нисходящих анализаторов [16] для формальных языков ANTLR [17]. Такой выбор был сделан по следующим причинам: ANTLR, в отличие от большинства альтернативных продуктов, таких как, например, Flex и Bison, предоставляет возможность генерации обоих анализаторов, и лексического (далее лексера) и синтаксического (далее парсера). Это позволяет использовать одно программное средство для решения обеих задач. Кроме того, одним из возможных целевых языков генерируемого кода ANTLR является язык Java, являющийся основным языком разработки плагины для NetBeans. Не менее важно, что ANTLR является широко используемым программным средством с подробной документацией и большим сообществом.

Для реализации, непосредственно, HAML-плагина был выбран ANTLR версии 3.5.2. На данный момент существует более поздняя версия ANTLR – 4.5.3, но в ней отсутствует поддержка автоматического построения деревьев разбора [18], что затрудняет её использование для решения поставленной задачи.

ANTLR генерирует код лексера и парсера на основе файла с расширением *.g. Синтаксис подобных файлов довольно прост, что делает их удобными для описания формального языка. Каждый g-файл начинается с ключевого слова grammar, определяющего название грамматики [19] (указывается сразу после него). Название грамматики должно совпадать с названием самого файла. Далее может идти блок опций, начинающийся с ключевого слова options. Доступный для ANTLR версии 3.5.2 ряд опций приведён в     таблице 1.

Таблица 1

Опции грамматики для ANTLR версии 3.5.2

Опция

Описание

language

Целевой язык для генерации. Доступные языки генерации: Java, C/C++, C#, Python, Ruby и другие. При отсутствии данной опции целевым языком является Java

tokenVocab

Позволяет описывать грамматики лексера и парсера в разных файлах. Опция задает имя грамматики лексера, из которой парсер возьмёт идентификаторы токенов.

output

Задает тип структуры данных, возвращаемый парсером. Возможные значения: AST или template.

ASTLabelType

Задает тип возвращаемого парсером дерева разбора. Возможные значения: CommonTree или собственный класс. По умолчанию ANTLR генерирует парсер, возвращающий дерево типа CommonTree.

TokenLabelType

Задает тип возвращаемых лексером токенов. Возможные значения: CommonToken или собственный класс. По умолчанию ANTLR генерирует лексер, возвращающий токены типа CommonToken.

superClass

Задает суперкласс для лексического или синтаксического анализаторов. Используется в тех случаях, когда необходимо переопределить стандартные методы класса лексера или парсера. При отсутствии опции лексический анализатор наследуется от класса Lexer, синтаксический анализатор – от класса Parser.

filter

Предоставляет возможность игнорирования тех конструкций потока символов, которые не определены в описании лексического анализатора. Предпочтительно использовать данную опцию в тех случаях, когда нет необходимости разбирать весь поток символов. При указании filter = true исключена возможность синтаксической ошибки.

rewrite

Необходим в тех случаях, когда входной поток после работы парсера должен измениться. Значение по умолчанию – false.

k

Задает ограничение для LL(k)-анализатора на количество токенов, доступных для предварительного просмотра. Опция уменьшает время работы парсера, однако может вызвать его некорректную работу. По умолчанию для предпросмотра доступны все токены, т.е. используется LL(*)-анализатор.

backtrack

Меняет алгоритм выделения нужной альтернативы в правилах разбора с LL(*)-анализатора, где для однозначного выделения нужной альтернативы поток токенов просматривается вперед на нужное кол-во элементов, на алгоритм с откатами. Возможные значения: true, false. Значение по умолчанию – false.

memoize

При алгоритме с откатами (backtrack = true) можно включить опцию memoize, которая позволяет запоминать применение правила к определенной позиции, таким образом, одна и та же последовательность токенов не может быть обработана синтаксическим анализатором более одного раза. В некоторых случаях существенно уменьшает время разбора, но требует больших ресурсов памяти. Возможные значения: true, false. Значение по умолчанию – false.

 

Пример использования блока options показан на рисунке 2.

Options

{

    language = Java;

    backtrack=true;

    memoize=true;

    output=AST;

    ASTLabelType=CommonTree;

}

Рис 2. Пример использования блока options

 

После блока options могут идти блоки @header и @members. В блоке @header располагается код, который будет помещен в начало генерируемого файла. В блоке @members располагается код, который будет помещен в тело классов лексического и синтаксического анализаторов. При помощи конструкции @lexer:: и @parser:: можно задать @header и @members для лексера и парсера раздельно. Пример использования блоков @header и @members показан на рисунке 3.

Блок @rulecatch позволяет заменить стандартное содержимое catch-раздела для каждого правила. Пример использования блока @rulecatch показан на рисунке 4.

Правила лексического анализатора задаются в верхнем регистре и представляют из себя шаблоны идентификаторов токена. Правила синтаксического анализатора задаются в нижнем регистре и представляют из себя шаблон корректной последовательности токенов. Шаблоны задаются через двоеточие после названия правила, в конце ставится точка с запятой. Их синтаксис во многом основан на регулярных выражениях. При создании плагина использовались конструкции языка ANTLR, показанные в таблице 2.

Таблица 2

Основные конструкции языка ANTLR

Обозначение

Описание

(…)

Подправило

(…)*

повторение подправила 0 или более раз

(…)+

повторение подправила 1 или более раз

(…)?

подправило, может отсутствовать или встречаться один раз

{…}

семантические действия (на языке, использующемся в качестве выходного)

[…]

параметры правила

{…}?

условие выполнения

|

оператор альтернативы

..

оператор диапазона

~

отрицание

.

любой символ

=

присвоение

 

@lexer::header {

  package org.mephi.haml.antlr;

}

@parser::header {

  package org.mephi.haml.antlr;

}

@lexer::members {

  @Override

  public void displayRecognitionError(String[] tokenNames, RecognitionException e) {

         String hdr = getErrorHeader(e);

         String msg = getErrorMessage(e, tokenNames);

         throw new RuntimeException(hdr + «:» + msg);

  }

}

@parser::members {

  @Override

  public void displayRecognitionError(String[] tokenNames, RecognitionException e) {

         String hdr = getErrorHeader(e);

         String msg = getErrorMessage(e, tokenNames);

         throw new RuntimeException(hdr + «:» + msg);

}

}

 Рис 3. Пример использования блоков @header и @members

 

@rulecatch

{

         catch (RecognitionException e)

         {

         throw e;

         }

}

Рис 4. Пример использования блока @rulecatch

 

Некоторые правила лексера могут начинаться с префикса fragment. Такое правило будет являться вспомогательным и не будет обрабатываться как токен. Пример подобного правила показан на рисунке 5.

text : TEXT;

 

TEXT : ((‘a’..’z’)|(‘A’..’Z’))((‘a’..’z’)|(‘A’..’Z’)|NUM|’_’)*;

 

fragment

NUM : (‘0’..’9′);

Рис 5. Пример вспомогательного правила

 

ANTLR позволяет работать не только с текущим символом или токеном потока, но и предоставляет возможность получения информации о символах и токенах, следующих за ним. Для лексического анализатора существует функция LA(n), которая возвращает символ, стоящий на n позиций впереди текущей. Для синтаксического анализатора есть аналогичная функция LT(n), которая возвращает токен, стоящий впереди текущей позиции на n токенов. Тип возвращаемого данной функцией значения – токен. Для получения идентификатора токена используется функция getType(), для получения лексемы – getText(). Идентификатор токена, находящийся на n позиций впереди текущего, также можно получить с помощью функции LA(n). Тип возвращаемого значения функций LA(n) и LT(n).getType()– целое число, присваиваемое токенам в соответствии с тем, какому правилу они удовлетворяют. Тип возвращаемого значения функции LT(n).getText() – строковая константа (String).  Пример использования данных функций показан на рисунке 6.

input.LT(1).getText()

input.LT(1).getType()

input.LA(1)

Рис 6. Работа с последующими токенами

Завершающей стадией процесса разработки лексического и синтаксического анализаторов является  генерация их кода. Она осуществляется командой java (версия может отличаться):

java -jar antlr-3.5.2-complete.jar Haml.g.

         После генерации каждому токену будет присвоен числовой идентификатор токена, поэтому понятие идентификатор токена разделяется на два новых понятия: числовой идентификатор и смысловой идентификатор. Последний хранит в себе идентификатор токена, указанный в g-файле.

 

         Этапы создания HAML-плагина

Разработка языкового HAML-модуля (далее плагина) была выполнена в несколько этапов.

На первом этапе был создан каркаса плагина. Он был создан  непосредственно в самой среде NetBeans, как проект модуля в категории «Модули NetBeans». Затем в данный проект была добавлена поддержка новых типов файла, соответствующего целевому языку. Для языка HAML это файлы с расширением «*.haml» В результате данного действия создаются файлы HamlDataObject.java, HamlTemplate.haml, HamlVisualElement.java, HamlVisualElement.form.

На следующем этапе был создан  новый слой XML, добавление которого повлекло за собой создание файла layer.xml, в котором позднее была задана структура проекта.

Третий этап – это подключение ANTLR v.3. Для его корректной работы потребовалось подключить к проекту последнюю версию соответствующего jar-файла, которая может быть загружена с ресурса [22].

Четвёртый этап – это создание пакета antlr и размещение в нем файлов с кодом грамматики. Кроме того, был создан пакет lexer,  реализующий классы, показанные в таблице 3.

Таблица 3

Классы пакета lexer

Класс

Описание

HamlTokenId

Реализует интерфейс класса TokenId пакета org.netbeans.api.lexer. Объекты класса хранят числовой и смысловой идентификаторы токена, а также категорию, к которой он относится. Класс реализует три метода: name(), ordinal(), primaryCategory(), которые возвращают хранимую информацию. Также необходимо создать объект класса Language пакета org.netbeans.api.lexer и присвоить ему “new HamlLanguageHierarchy().language()”.

HamlLanguageHierarchy

Наследуется от абстрактного класса LanguageHierarchy пакета org.netbeans.spi.lexer. Необходимо реализовать три абстрактных метода: createTokenIds(), createLexer(), mimeType(), а также создать HashMap, в котором ключом является идентификатор токена, а значением — объект класса HamlTokenId. Для получения значения из HashMap по ключу требуется реализовать публичный метод getToken().

AntlrCharStream

Реализует интерфейс класса CharStream пакета org.antlr.runtime. В данном классе необходимо реализовать следующие методы: substring(), LT(), getLine(), setLine(), setCharPositionInLine(), getCharPositionInLine(), consume(), LA(), mark(), rewind(), release(), seek(), index(), size(), getSourceName(). Занимается обработкой потока символов.

HamlLexer

Реализует интерфейс класса Lexer пакета org.netbeans.spi.lexer. В данном классе необходимо реализовать следующие методы: nextToken(), state(), release(). Считывает набор символов и группирует их в токены.

 

         Последний этап являлось задание цвета лексем, относящихся к введенным категориям. Для решения данной задачи был создан файл FontAndColors.xml, в котором были установлены связи между категориями и цветами.

 

Заключение

         В результате выполненных в НИЯУ МИФИ работ были разработаны, успешно протестированы и интегрированы в среду разработки NetBeans плагины поддержки языка HAML и средства подготовки JSON-представлений JBuilder. Разработанные плагины в совокупности с другими существующими плагинами поддержки фреймворка Ruby on Rails формируют полноценное рабочее место Ruby on Rails-программиста  и позволяют значительно повысить эффективность разработки крупных веб проектов. Что, в свою очередь, позволяет использовать IDE NetBeans в качестве основной среды разработки веб-приложений на основе фреймворка Ruby on Rails. Пример работы разработанного плагина показан на рисунке 7.

Рис 7. Пример работы HAML-плагина

 

         Рассмотренные в статье технологии независимы от выбора целевого языка и позволяют разрабатывать собственные языковые модули для широко спектра языков программирования. Что, в свою очередь, позволяет использовать такое мощное средство разработки, как IDE NetBeans для большинства современных задач программирования.

         Стоит отметить, что используемые программные продукты являются бесплатными и свободными, что позволяет беспрепятственно использовать их в коммерческих продуктах и значительно снижает затраты на разработку в целом.

Библиографический список

1.Hartl M. Ruby on Rails Tutorial: Learn Web Development with Rails. – Addison-Wesley, 2015, – 707 с.
2.http://trends.builtwith.com/framework – статистика использования различных фреймворк-технологий в сети интернет по информации компании BuiltWith Pty Ltd (дата последнего обращения 07.11.2016).
3.Wagstrom, P., Jergensen, C., Sarma, A. A network of rails: A graph dataset of ruby on rails and associated projects // Proceedings of IEEE International Working Conference on Mining Software Repositories, 2013, – С229-232.
4.Куприянов Д.Ю., Радыгин В.Ю., Лукьянова Н.В. Применение механизмов Ruby on Rails для построения информационных систем вуза // Итоги и перспективы интегрированной системы образования в высшей школе России: образование – наука – инновационная деятельность. Труды конференции. – М., МГИУ, 2011 – С237-239.
5.Куприянов Д.Ю., Радыгин В.Ю. Применение информационных технологий для организации интернет-тестирования студентов МГИУ // Итоги и перспективы интегрированной системы образования в высшей школе России: образование – наука – инновационная деятельность: Труды конференции. – Москва: МГИУ, 2011 – С239-241.
6.Viswanathan, V. Rapid web application development: A ruby on rails tutorial // IEEE Software Vol. 25, Is. 6, 2008, – С98-106.
7.Tunc, H., Taddese, A., Volgyesi, P., Sallai, J., Valdastri, P., Ledeczi, A., Web-based integrated development environment for event-driven applications // Proceedings of IEEE SOUTHEASTCON 2016, – С1-8.
8.Liu, D., Zhu, H., Xu, C., Bayley, I., Lightfoot, D., Green, M., Marshall, P. CIDE: An integrated development environment for microservices // Proceedings of Services Computing (SCC), IEEE International Conference,2016, – С808-812.
9.Cremona, F., Lohstroh, M., Tripakis, S., Brooks, C., Lee, E.A. FIDE — An FMI Integrated Development environment // Proceedings of the ACM Symposium on Applied Computing, 2016, – С1759-1766.
10.Krupitzer, C., Roth, F.M., Becker, C., Weckesser, M., Lochau, M., Schurr, A. FESAS IDE: An integrated development environment for autonomic computing // Proceedings of IEEE International Conference on Autonomic Computing, ICAC 2016, – С15-24.
11.Cuadrado, L.-E.I., Riesco, Á.M., De La Paz López, F. Artie: An integrated environment for the development of affective robot tutors // Frontiers in Computational Neuroscience. 2016, Vol. 10, – С1-16.
12.Schätz, B. Platforms for Cyber-Physical Systems — Fractal operating system and integrated development environment for the physical world // Proceedings of 3rd International Workshop on Emerging Ideas and Trends in Engineering of Cyber-Physical Systems, EITEC 2016, – С1-4.
13.Grun, C., Werfel, J., Zhang, D.Y., Yin, P. DyNAMiC Workbench: An integrated development environment for dynamic DNA nanotechnology // Journal of the Royal Society Interface, Vol. 12, Iss. 111, – С1-13.
14.http://tagline.ru/ide-rating/ – рейтинг сред разработки (IDE) 2016 по версии кампании tagline (дата последнего обращения 07.05.2017).
15.Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman. Compilers: Principles, Techniques, & Tools, Second Edition // Addison-Wesley, 2007, – 1000 с.
16.Rosenkrantz, D. J.; Stearns, R. E. Properties of Deterministic Top Down Grammars // Information and Control, Vol. 17, – С226–256.
17.Parr, T., The Definitive ANTLR Reference: Building Domain-Specific Languages // Pragmatic Bookshelf, 2017, – 376 с.
18.Jones J. Abstract syntax tree implementation idioms // Proceedings of the 10th Conference on Pattern Languages of Programs, 2003. – С125-137.
19.Parr, T. Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages // Pragmatic Bookshelf, 2009, – 374 с.
20. Иванов С.Л., Шамин А.А. Расширение возможностей защиты информации в Ms Excel посредством применения макросов // Вестник НГИЭИ. 2016. № 4 (59). С. 93-98.
21. Завиваев Н.С., Проскура Н.В. Подходы к формированию этапов развития телекоммуникационных услуг // Вестник НГИЭИ. 2016. № 12 (67). С. 91-95.
22.http://www.antlr3.org/ – официальный сайт ANTLR v.3 (дата последнего обращения 07.05.2017).

References

1.Hartl M. Ruby on Rails Tutorial: Learn Web Development with Rails. – Addison-Wesley, 2015, – 707 p.
2.http://trends.builtwith.com/framework – statistics of using of different framework technologies by BuiltWith Pty Ltd company (last access date 07.05.2017).
3.Wagstrom, P., Jergensen, C., Sarma, A. A network of rails: A graph dataset of ruby on rails and associated projects. Proceedings of IEEE International Working Conference on Mining Software Repositories, 2013, – pp. 229-232.
4.Kupriyanov D.Yu., Radygin V.Yu., Lukyanova N.V. Using of Ruby on Rails for University Information Systems Development. Proceedings of Second International Conference “Results and Perspectives of Integrated Education System in Russian Universities”. Moscow MGIU, 2011, – pp 237-239.
5.Kupriyanov D.Yu., Radygin V.Yu., Using of Information Technologies for Organization of Internet Testing for MGIU Students. Proceedings of Second International Conference “Results and Perspectives of Integrated Education System in Russian Universities”. Moscow MGIU, 2011, – pp 239-241.
6.Viswanathan, V. Rapid web application development: A ruby on rails tutorial. IEEE Software Vol. 25, Is. 6, 2008, – pp. 98-106.
7.Tunc, H., Taddese, A., Volgyesi, P., Sallai, J., Valdastri, P., Ledeczi, A., Web-based integrated development environment for event-driven applications. Proceedings of IEEE SOUTHEASTCON 2016, – pp. 1-8.
8.Liu, D., Zhu, H., Xu, C., Bayley, I., Lightfoot, D., Green, M., Marshall, P. CIDE: An integrated development environment for microservices. Proceedings of Services Computing (SCC), IEEE International Conference,2016, – pp. 808-812.
9.Cremona, F., Lohstroh, M., Tripakis, S., Brooks, C., Lee, E.A. FIDE — An FMI Integrated Development environment. Proceedings of the ACM Symposium on Applied Computing, 2016, – pp. 1759-1766.
10.Krupitzer, C., Roth, F.M., Becker, C., Weckesser, M., Lochau, M., Schurr, A. FESAS IDE: An integrated development environment for autonomic computing. Proceedings of IEEE International Conference on Autonomic Computing, ICAC 2016, – pp. 15-24.
11.Cuadrado, L.-E.I., Riesco, Á.M., De La Paz López, F. Artie: An integrated environment for the development of affective robot tutors. Frontiers in Computational Neuroscience. 2016, Vol. 10, – pp. 1-16.
12.Schätz, B. Platforms for Cyber-Physical Systems — Fractal operating system and integrated development environment for the physical world. Proceedings of 3rd International Workshop on Emerging Ideas and Trends in Engineering of Cyber-Physical Systems, EITEC 2016, – pp. 1-4.
13.Grun, C., Werfel, J., Zhang, D.Y., Yin, P. DyNAMiC Workbench: An integrated development environment for dynamic DNA nanotechnology. Journal of the Royal Society Interface, Vol. 12, Iss. 111, – pp. 1-13.
14.http://tagline.ru/ide-rating/ –IDE ranking 2016 by Tagline company (last access date 07.05.2017).
15.Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman. Compilers: Principles, Techniques, & Tools, Second Edition, Addison-Wesley, 2007, – 1000 p.
16.Rosenkrantz, D. J.; Stearns, R. E. Properties of Deterministic Top Down Grammars. Information and Control, Vol. 17, – pp. 226–256.
17.Parr, T., The Definitive ANTLR Reference: Building Domain-Specific Languages, Pragmatic Bookshelf, 2017, – 376 p.
18.Jones J. Abstract syntax tree implementation idioms. Proceedings of the 10th Conference on Pattern Languages of Programs, 2003. – pp.125-137.
19.Parr, T. Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages, Pragmatic Bookshelf, 2009, – 374 p.
20. Ivanov S.L., Shamin A.A. Rasshirenie vozmozhnostej zashhity informacii v Ms Excel posredstvom primenenija makrosov . Vestnik NGIJeI. 2016. No 4 (59). P. 93-98.
21. Zavivaev N.S., Proskura N.V. Podhody k formirovaniju jetapov razvitija telekommunikacionnyh uslug. Vestnik NGIJeI. 2016. No 12 (67). P. 91-95.
22.http://www.antlr3.org/ – official site of ANTLR v.3 (last access date 07.05.2017).