Диссертация (1150733), страница 3
Текст из файла (страница 3)
С использованием разработанного инструментария было реализовано расширение к инструменту ReSharper (ООО “ИнтеллиДжей Лабс”, Россия), предоставляющееподдержку встроенного T-SQL в проектах на языке программирования C# всреде разработки Microsoft Visual Studio. Так же было выполнено внедрениерезультатов работы в промышленный проект по переносу хранимого SQL-кодас MS-SQL Server 2005 на Oraclе 11gR2 (ЗАО “Ланит-Терком”, Россия).Степень достоверности и апробация результатовДостоверность и обоснованность результатов исследования опирается на использование формальных методов исследуемой области, проведенные доказательства, рассуждения и эксперименты.12Основные результаты работы были доложены на ряде научных конференций: SECR-2012, SECR-2013, SECR-2014, TMPA-2014, Parsing@SLE-2013, Рабочий семинар “Наукоемкое программное обеспечение” при конференции PSI2014.
Доклад на SECR-2014 награждён премией Бертрана Мейера за лучшуюисследовательскую работу в области программной инженерии. Дополнительнойапробацией является то, что разработка инструментальных средств на основепредложенного алгоритма была поддержана Фондом содействия развитию малых форм предприятий в технической сфере (программа УМНИК2 , проекты№ 162ГУ1/2013 и № 5609ГУ1/2014).Публикации по теме диссертацииВсе результаты диссертации изложены в 7 научных работах, из которых3 [45–47] содержат основные результаты и опубликованы в журналах из “Перечня российских рецензируемых научных журналов, в которых должны бытьопубликованы основные научные результаты диссертаций на соискание ученыхстепеней доктора и кандидата наук”, рекомендовано ВАК.
1 работа [48] индексируются Scopus. В работах, написанных в соавторстве, вклад автора определяется следующим образом. В [49] С. Григорьеву принадлежит реализация ядраплатформы YaccConstructor. В [46, 47] и [50] С. Григорьеву принадлежит постановка задачи, формулирование требований к разрабатываемым инструментальным средствам, работа над текстом.
В [48] автору принадлежит идея, описаниеи реализация анализа встроенных языков на основе RNGLR алгоритма. В [45]С. Григорьеву принадлежит реализация инструментальных средств, проведениеэкспериментов, работа над текстом. В работе [51] автору принадлежит алгоритмсинтаксического анализа динамически формируемого кода.Структура работыДиссертация состоит из введения, шести глав, заключения и построена следующим образом. В первой главе приводится обзор области исследования. Рассматриваются подходы к анализу динамически формируемых строковых выражений и соответствующие инструменты. Описывается алгоритм обобщённоговосходящего синтаксического анализа RNGLR, взятый за основу в диссертационной работе. Также описываются проекты YaccConstructor и ReSharper SDK,2Список победителей конкурса УМНИК (дата обращения: 29.07.2015):http://www.fasie.ru/obyavleniya/9-obyavleniya-dlya-zayavitelej/1762-opublikovan-spisok-pobeditelej-programmy-umnik-2-go-polugodiya-2014-goda.13использованные для реализации предложенного в работе инструментария.
Вовторой главе формализуется задача синтаксического анализа регулярных множеств и излагается соответствующий алгоритм. Доказывается завершаемость икорректность представленного алгоритма, приводятся примеры. В третьей главеописывается инструментальный пакет YC.SEL.SDK, разработанный на основепредложенного алгоритма и предназначеный для разработки инструментов анализа динамически формируемых программ.
Описывается архитектура компонентов и особенности их реализации. Также описывается YC.SEL.SDK.ReSharper —“обёртка” для YC.SEL.SDK, позволяющая создавать расширения к ReSharperдля поддержки встроенных языков. В четвёртой главе описывается метод реинжиниринга встроенного программного кода. В пятой главе приводятся результаты экспериментального исследования разработанного алгоритма и инструментаYC.SEL.SDK.
Шестая глава содержит результаты сравнения и соотнесения полученных результатов с существующими аналогами.БлагодарностиАвтор выражает благодарность А. Н. Терехову, работкникам и администрации компании ЗАО “Ланит-Терком” за создания условий для изучения даннойтемы (организация проектов по реинжинирингу), Я. А. Кириленко за погружение в тему исследования и руководство на начальных этапах, Д. Ю.
Булычевуза помощь в уточнении постановки задачи исследования и в написании статей, студентам и аспирантам кафедры системного программирования Д. Авдюхину, А. Рагозиной, Е. Вербицкой, М. Полубеловой, А. Иванову за помощь вреализации предложенных идей и проведение экспериментов. Отдельную благодарность хочется выразить компании ООО “ИнтеллиДжей Лабс” и А. Иванову за поддержку исследований. Также хочется поблагодарить А.
К. Петренко иВ. М. Ицыксона, а также сотрудников ИСП РАН за ценные вопросы и комментарии к работе, позволившие уточнить ряд формулировок и улучшить изложениерезультатов.14Глава 1ОбзорВ данной главе введены основные термины и определения, используемыев работе, а также рассмотрены основные подходы к анализу встроенных языков и инструменты для их обработки. Также рассмотрен алгоритм обобщённоговосходящего синтаксического анализа RNGLR, использованный в данной диссертационной работе.
Кроме того, описаны технологии, использовавшиеся приразработке инструментального пакета YC.SEL.SDK.1.1Языки и грамматикиВ данном разделе вводится ряд обозначений, а также определяются основныепонятия из теории формальных языков, которые используются в работе.О ПРЕДЕЛЕНИЕ 1. Алфавит Σ — это конечное множество символов.О ПРЕДЕЛЕНИЕ 2. Цепочкой символов в алфавите Σ называется любая конечнаяпоследовательность символов этого алфавита. Цепочка, которая не содержитни одного символа, называется пустой цепочкой. Для её обозначения будем использовать греческую букву (не входит в алфавит Σ, а используется толькодля обозначения пустой последовательности).О ПРЕДЕЛЕНИЕ 3. Язык над алфавитом Σ — это подмножество множествавсех цепочек в этом алфавите.О ПРЕДЕЛЕНИЕ 4.
Грамматика — это четвёрка ⟨, , , ⟩, где15– обозначает алфавит терминальных символов или терминалов,– — алфавит нетерминальных символов или нетерминалов, ∩ = ∅,– — конечное подмножество множества ( ∪ )+ × ( ∪ )* ,– — стартовый символ грамматики, ∈ .При этом элемент (, ) ∈ называется правилом вывода и записываетсятак: → .
При этом называется левой частью правила, а — правой частью.Левая часть любого правила из обязана содержать хотя бы один нетерминал.О ПРЕДЕЛЕНИЕ 5. Вывод цепочки в грамматике .Цепочка ∈ ( ∪ )* непосредственно выводима из цепочки ∈ ( ∪ )+ вграмматике = ⟨, , , ⟩ (обозначается → ), если = 1 ··2 , = 1 · ·2 ,где 1 , 2 , ∈ ( ∪ )* , ∈ ( ∪ )+ и правило вывода → содержится в .Индекс в обозначении → обычно опускают, если понятна из контекста.Цепочка ∈ ( ∪ )* выводима из цепочки ∈ ( ∪ )+ в грамматике (обозначается ⇒ ), если существуют цепочки 0 , 1 , · · · , ( ≥ 0) такие,что = 0 → 1 → ...
→ = . При этом последовательность 0 , 1 , ..., называется выводом длины .О ПРЕДЕЛЕНИЕ 6. Язык, порождаемым грамматикой = ⟨, , , ⟩ — это множество () = { ∈ * | ⇒ }.О ПРЕДЕЛЕНИЕ=7. Левостороннийвыводцепочкивграмматике⟨, , , ⟩ — это вывод, в котором на каждом шаге заменяетсясамое левое из всех вхождений нетерминальных символов, то есть каждыйшаг вывода имеет вид ⇒ , где ( → ) ∈ , ∈ Σ* и ∈ ( ∪ Σ)* .О ПРЕДЕЛЕНИЕ 8. Правосторонний вывод цепочки в грамматике =⟨, , , ⟩ определяется аналогично левостороннему, то есть на каждом шагезаменяется самое правое вхождение нетерминала.О ПРЕДЕЛЕНИЕ 9.
Грамматика называется неоднозначной (ambiguous), еслисуществует слово ∈ (), которое имеет два или более левосторонних вывода. В противном случае контекстно-свободная грамматика называется однозначной (unambiguous).16О ПРЕДЕЛЕНИЕ 10.
Язык 1 называется существенно неоднозначным, если несуществует такой грамматики , что однозначна и 1 = ().О ПРЕДЕЛЕНИЕ 11. Деревом вывода цепочки ∈ * в грамматике =⟨, , , ⟩ называется упорядоченное дерево со следующими свойствами.– Корень помечен .– Если его внутренний узел помечен ∈ и 1 , . . . , ∈ ∪ — перечисленные слева направо пометки всех сыновей этого узла, то правило → 1 . . . ∈ .– Если его внутренний узел помечен ∈ и — пометка единственногосына этого внутреннего узла, то правило → ∈ .– = 1 . . . , где 1 , .
. . , ∈ ∪ {} перечисленные слева направо пометки всех листьев этого дерева.О ПРЕДЕЛЕНИЕ 12. Динамически формируемое строковое выражение — этостроковое выражение, значение которого будет известно только в моментвыполнения программы.О ПРЕДЕЛЕНИЕ 13. Динамически формируемая программа — это программа, кодкоторой задаётся в виде динамически формируемого строкового выражения.О ПРЕДЕЛЕНИЕ 14. Язык, на котором написана программа, использующая динамически формируемые программы, будем называть внешним языком.