📄Работа №64299

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

📝
Тип работы Бакалаврская работа
📚
Предмет программирование
📄
Объем: 38 листов
📅
Год: 2016
👁️
Просмотров: 95
Не подходит эта работа?
Закажите новую по вашим требованиям
Узнать цену на написание
ℹ️ Настоящий учебно-методический информационный материал размещён в ознакомительных и исследовательских целях и представляет собой пример учебного исследования. Не является готовым научным трудом и требует самостоятельной переработки.

📋 Содержание

Введение 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.

🖼 Скриншоты

🛒 Оформить заказ

Работу высылаем в течении 5 минут после оплаты.

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