Тип работы:
Предмет:
Язык работы:


Особенности вычисления семантики встроенных языков

Работа №59484

Тип работы

Магистерская диссертация

Предмет

информационные системы

Объем работы33
Год сдачи2016
Стоимость4820 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
49
Не подходит работа?

Узнай цену на написание


Введение 4
1. Постановка задачи 6
2. Обзор 7
2.1. Подходы к статическому анализу встроенных языков 7
2.2. Существующие методы и инструменты 7
2.3. Проект YaccConstructor 8
2.4. Лес разбора SPPF 10
2.5. Анализ потоков данных и граф потока управления 11
3. Построение графа потока управления по лесу разбора 14
4. Поиск хорошо определённых переменных в динамически формируемых программах 21
5. Реализация 28
5.1. Архитектура 28
5.2. Детали реализации поиска хорошо определённых переменных 29
Заключение 31
Список литературы

Существует подход к программированию, в котором одна программа динамически формирует другую программу на некотором языке и передаёт её на выполнение в соответствующее окружение. При этом генерируемый код собирается из строк таким образом, чтобы в момент выполнения результирующая строка представляла собой корректную программу. Далее генерируемый код будем называть встроенным кодом, язык, на котором написан встроенный код, - встроенным языком, получающиеся программы - динамически формируемыми программами. В качестве примера можно привести формирование HTML-страниц в PHP-приложениях, SQL-запросы к базам данных в приложениях на C#, C++, Java. Программы, написанные с использованием такого подхода, обладают высокой производительностью, являются гибкими и выразительными. Благодаря этому подход к программированию, связанный с использованием встроенных языков, получил широкое распространение.
В настоящее время при создании ПО активно используются интегрированные среды разработки (Integrated Development Environment, IDE). Их основная цель - повысить продуктивность работы программиста. Эта цель достигается за счёт того, что IDE интегрирует различные утилиты - компилятор, отладчик, текстовый редактор и т. п., - являясь единственной средой, с помощью которой ведётся разработка. Это избавляет разработчика от необходимости каждый раз вручную переключаться между несколькими программами, что положительно сказывается на его производительности. Также IDE может применять утилиты параллельно и комбинированно. Например, совместная работа текстового редактора и компилятора позволяет реализовать функции автодополнения и навигации по коду, а также статический поиск ошибок, возможность осуществления рефакторинга кода и т. п.
Однако при работе с приложениями, которые используют встроенные языки, трудно реализовать функции IDE, которые указаны выше. Это связано с тем, что компилятор воспринимает встроенный код как обычную строку в основном коде, т. е. встроенный код не анализируется статическим образом. Отсутствие статических проверок ведёт к тому, что об ошибках во встроенном коде станет известно только во время выполнения программы. В некоторых приложениях такая ситуация может оказаться критичной, поскольку ошибка может привести к нарушению целостности данных. Помимо этого в случае, когда встроенный код формируется при помощи условных операторов или циклов основного языка, то его (код) сложно понимать и отлаживать.
Инструмент, осуществляющий статический анализ встроенного кода, позволит из-бежать описанных выше проблем. Разработка такого инструмента ведётся в рамках проекта YaccConstructor [11, 14, 15, 16], одним из направлений исследований которого является статический анализ встроенных языков. Основной идеей проекта является предположение, что если есть программа, содержащая в себе встроенный код, то в большинстве случаев из неё можно извлечь достаточно информации для проведения статического анализа динамически формируемых программ [14]. В рамках проекта уже проведены исследования в области лексического и синтаксического анализа встроенных языков, предложены и апробированы соответствующие алгоритмы [13, 17]. Однако в проекте отсутствуют средства семантического анализа, которые были бы полезны при решении многих классических задач статического анализа.

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В ходе данной работы получены следующие результаты.
• Разработан алгоритм построения графа потока управления для динамически формируемого кода, который принимает на вход лес разбора
• Решена задача поиска хорошо определённых переменных при анализе встроенных языков.
• Выполнена реализация получившихся алгоритмов в рамках исследовательского проекта YaccConstructor.
• Результаты работы вошли в статью “On Development of Static Analysis Tools for String-Embedded Languages” (CEE-SECR’15 Proceedings of the 10th Central and Eastern European Software Engineering Conference in Russia).
Проект можно найти на сайте https://github.com/YaccConstructor/YaccConstructor, автор принимал участие под учётной записью IvanovAndrew.
В дальнейшем планируется исследовать другие задачи анализа потоков данных: задача поиска достижимые определения (use-def chains), живых переменных (def¬use chains). Решение первой задачи может быть использовано при реализации такой функции IDE, как “перейти к определению” (go to definition), в то время как решение второй может быть полезно при реализации функции “перейти к использованию” (find usages).



[1] Aho A. V., Sethi R., Ullman J. D. Compilers: Principles, Techniques, and Tools.— Boston, MA, USA : Addison-Wesley Longman Publishing Co., Inc., 1986.
[2] Annamaa A., Breslav A., Vene V. Using Abstract Lexical Analysis and Parsing to Detect Errors in String-Embedded DSL Statements // Proceedings of the 22nd Nordic Workshop on Programming Theory. — 2010. — P. 20-22.
[3] Automata-based Symbolic String Analysis for Vulnerability Detection / F. Yu, M. Alkhalaf, T. Bultan, O. H. Ibarra // Form. Methods Syst. Des. — 2014. — Vol. 44, no. 1. — P. 44-70.
[4] Christensen A. S., Mpller A., Schwartzbach M. I. Precise Analysis of String Expressions // Proc. 10th International Static Analysis Symposium (SAS).— Vol. 2694 of LNCS. -- Springer-Verlag, 2003. -- P. 1-18.
[5] Constantini J., Ferrara P., Cortesi A. Static Analysis of String Values // Formal Methods and Software Engineering. 13th International Conference on Formal Engineering Methods, ICFEM 2011, Durham, UK, October 26-28, 2011. Proceedings. -- Springer Berlin Heidelberg, 2011. -- P. 505-521.
[6] An Interactive Tool for Analyzing Embedded SQL Queries / A. Annamaa, A. Breslav,
J. Kabanov, V. Vene // Programming Languages and Systems. — 2010. — P. 131-138.
[7] Kim H., Doh K.-G., Schmidt D. Static validation of dynamically generated HTML documents based on abstract parsing and semantic processing // Static Analysis. 20th International Symposium, SAS 2013, Seattle, WA, USA, June 20-22, 2013. Proceedings. — Springer Berlin Heidelberg, 2013. — P. 194-214.
[8] Minamide Y. Static Approximation of Dynamically Generated Web Pages // Proceedings of the 14th International Conference on World Wide Web. -- WWW ’05. - New York, NY, USA : ACM, 2005. - P. 432-441.
[9] Nguyen H. V., Kastner C., Nguyen T. N. Varis: IDE Support for Embedded Client Code in PHP Web Applications // Proceedings of the 37th International Conference on Software Engineering (ICSE). - Vol. 2. - 2015. - P. 693-696.
[10] Rekers J. G. Parser Generation for Interactive Environments : Ph. D. thesis /
J. G. Rekers ; Universiteit van Amsterdam. — 1992.
[11] String-embedded Language Support in Integrated Development Environment /
S. Grigorev, E. Verbitskaia, A. Ivanov et al. // Proceedings of the 10th Central and Eastern European Software Engineering Conference in Russia.— CEE-SECR ’14.— New York, NY, USA : ACM, 2014. - P. 21:1-21:11.
[12] Syme D., Granicz A., Cisternino A. Expert F# (Expert’s Voice in .Net).
[13] Verbitskaia E., Grigorev S., Avdyukhin D. Relaxed Parsing of Regular Approximations of String-Embedded Languages // Preliminary Proceedings of the PSI 2015: 10th International Andrei Ershov Memorial Conference. — PSI’15. — 2015. — P. 1-12.
[14] Григорьев С.В. Синтаксический анализ динамически формируемых программ : Дисс... кандидата наук / С.В. Григорьев ; Санкт-Петербургский государственный университет. -- 2015.
[15] Инструментальная поддержка встроенных языков в интегрированных средах разработки / С. В. Григорьев, E. А. Вербицкая, М.И. Полубелова и др. // Моделирование и анализ информационных систем. — 2014. — Т. 21, № 6. — С. 131-143. — URL: http://mais-journal.ru/jour/article/view/77.
[16] Кириленко Я.А, Григорьев С.В., Авдюхин Д.А. Разработка синтаксических анализаторов в проектах по автоматизированному реинжинирингу информационных систем // Научно-технические ведомости Санкт-Петербургского государственного политехнического университета. Информатика. Телекоммуникации. Управление. — 2013. — Т. 174, № 3. — С. 94-98. — URL: http://ntv.spbstu.ru/telecom/article/T3.174.2013_11/.
[17] Полубелова М.И. Лексический анализ динамически формируемых строковых выражений // Бакалаврская работа кафедры системного программирования СПбГУ.— 2015.— URL: http://se.math.spbu.ru/SE/diploma/2015/bmo/444-Polubelova-report.pdf.
[18] Хабибуллин М.Р. Построение регулярной аппроксимации встроенных языков. — 2015. — Магистерская диссертация.


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ