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


Диагностика синтаксических ошибок в динамически формируемом коде

Работа №64299

Тип работы

Бакалаврская работа

Предмет

программирование

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

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


Введение 4
1. Постановка задачи 5
2. Обзор 6
2.1. Регулярная аппроксимация динамически формируемого выражения . . 6
2.2. Алгоритм ослабленного синтаксического анализа регулярной аппрокси¬
мации динамически формируемого выражения 6
2.3. Понятие синтаксической ошибки в алгоритмах LR-семейства 11
2.4. Проект YaccConstructor 12
3. Понятие синтаксической ошибки 14
4. Механизм диагностики ошибок 16
4.1. Компактное представление префиксов внутреннего графа 16
4.2. Алгоритм построения префиксов 17
4.3. Алгоритм диагностики ошибок 19
5. Корректность механизма диагностики ошибок 23
5.1. Корректность алгоритма построения префиксов 23
5.2. Корректность алгоритма диагностики ошибок 30
6. Экспериментальное исследование 34
7. Заключение 37
Список литературы 38


При разработке сложных программных систем существует проблема недостат¬ка выразительности и гибкости языков программирования общего назначения. Ча¬сто для решения данной проблемы помимо основного языка используют один или несколько других (встроенных) языков. В данном подходе программа, написанная на основном языке, динамически формирует строковое представление кода на встро¬енном языке, и далее сформированная строка анализируется и выполняется специ¬альными компонентами (базы данных, веб-браузер) во время исполнения основной программы.
Как правило, динамически формируемые выражения, описывающие код программ на встроенных языках, конструируются с использованием конкатенаций строковых литералов в ветках условных операторов, циклах и рекурсивных процедурах. Это при-водит к множеству возможных значений встроенного кода, что не позволяет в общем виде использовать статический анализ для проверки корректности формируемого вы¬ражения. В результате этого становятся недоступными такие типы функционально¬сти, как информирование о синтаксических ошибках, автодополнение и подсветка синтаксиса. Отсутствие этих возможностей повышает вероятность ошибок, которые обнаруживаются лишь во время выполнения программы, а также усложняет процесс разработки и тестирования.
Существует ряд инструментов, позволяющих проводить анализ динамически фор-мируемых строковых выражений: Java String Analyzer [5, 9], PHP String Analyzer [12], Alvor [8, 2, 1], IntelliLang [7], PHPStorm [14], Varis [13] (анализ этих технологий приве¬ден в работе [21]). Большинство реализаций проводят диагностику синтаксических ошибок, но плохо расширяемы: как в смысле поддержки других языков, так и в смысле решения новых задач. Существует алгоритм, описанный в статье [19] и ре¬ализованный как часть проекта YaccConstructor [11], который позволяет провести синтаксический анализ динамически формируемых выражений. В отличие от других инструментов, реализация данного алгоритма хорошо расширяема и строит конечное представление леса разбора относительно входной грамматики, которое может быть использовано в дальнейшем семантическом анализе. Недостаток данного алгоритма заключается в отсутствии механизма диагностики синтаксических ошибок. Устране¬нию этого недостатка и посвящена данная работа.


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

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

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


В ходе данной работы получены следующие результаты.
• Определено понятие синтаксической ошибки в терминах регулярной аппрокси¬мации динамически формируемого выражения.
• Разработан механизм диагностики ошибок в синтаксическом анализе регулярной аппроксимации динамически формируемого выражения.
• Доказана корректность предложенного механизма.
• Предложенный механизм реализован на языке программирования F# в рамках проекта YaccConstructor.
• Проведено экспериментальное исследование: тестирование работоспособности и тестирование производительности.
• Исходный код проекта YaccConstructor можно найти на сайте https://github. com/YaccConstructor/YaccConstructor, автор принимал участие под учётной записью rustam-azimov.
В дальнейшем планируется использовать результат работы модифицированного алгоритма синтаксического анализа для формирования сообщений об обнаруженных ошибках, удобных для пользователя. Кроме того, необходимо произвести теоретиче¬скую оценку сложности модифицированного алгоритма.



[1] Alvor [Электронный ресурс].— URL: https://bitbucket.org/plas/alvor (дата обращения: 18.05.2016).
[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] Asveld P. R. J., Nijholt A. The Inclusion Problem for Some Subclasses of Context- free Languages.— Vol. 230.— Essex, UK : Elsevier Science Publishers Ltd., 1999.— December. — P. 247-256.
[4] 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.
[5] 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.
[6] Dick G., Ceriel H. Parsing Techniques: A Practical Guide. — Upper Saddle River, NJ, USA : Ellis Horwood, 1990.— ISBN: 0-13-651431-6.
[7] IntelliLang [Электронный ресурс].— URL: https://www.jetbrains.com/idea/ help/intellilang.html (дата обращения: 18.05.2016).
[8] An Interactive Tool for Analyzing Embedded SQL Queries / A. Annamaa, A. Breslav,
J. Kabanov, V. Vene // Proceedings of the 8th Asian Conference on Programming Languages and Systems. — APLAS’10. — Berlin, Heidelberg : Springer-Verlag, 2010. — P. 131-138.
[9] Java String Analyzer [Электронный ресурс].— URL: http://www.brics.dk/JSA/ (дата обращения: 18.05.2016).
[10] Khabibullin M., Ivanov A., Grigorev S. On Development of Static Analysis Tools for String-Embedded Languages. -- 2015. -- URL: https://github.com/ YaccConstructor/articles/blob/master/2015/SECR/paper/Main.pdf (online; accessed: 18.05.2016).
[11] Kirilenko I., Grigorev S., Avdiukhin D. Syntax Analyzers Development in Automated Reengineering of Informational System // St. Petersburg State Polytechnical University Journal. Computer Science. Telecommunications and Control Systems. -¬2013. — Vol. 174, no. 3. — P. 94-98.
[12] 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.
[13] 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).— New York, NY : ACM Press, 2015.— Formal Demonstration paper.
[14] PHPStorm IDE [Электронный ресурс].— URL: https://www.jetbrains.com/ phpstorm/ (дата обращения: 18.05.2016).
[15] Rekers J. Parser Generation for Interactive Environments. — 1992.
[16] Scott E., Johnstone A. Right Nulled GLR Parsers // ACM Trans. Program. Lang. Syst. - 2006. - Vol. 28, no. 4. - P. 577-618.
[17] Syme Don, Granicz Adam, Cisternino Antonio. Expert F# (Expert’s Voice in .Net). — ISBN: 1590598504, 9781590598504.
[18] Tomita M. An Efficient Context-free Parsing Algorithm for Natural Languages // Proceedings of the 9th International Joint Conference on Artificial Intelligence - Volume 2.— IJCAI’85.— San Francisco, CA, USA : Morgan Kaufmann Publishers Inc., 1985. — P. 756-764.
[19] 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.
[20] Вербицкая Е. А. Синтаксический анализ регулярных множеств : Квалификаци¬онная работа магистра / Е. А. Вербицкая ; Санкт-Петербургский государствен¬ный университет. — 2015.
[21] Григорьев C. В. Синтаксический анализ динамически формируемых программ : Дисс... кандидата наук / C. В. Григорьев ; Санкт-Петербургский государствен¬ный университет. — 2015.



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




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