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


Расширяемый генератор синтаксически корректных программ для обучения программированию

Работа №127283

Тип работы

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

Предмет

информатика

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

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


Введение 4
Постановка задачи 5
Глава 1. Обзор и сравнение существующих генераторов программного кода 6
1.1. Понятие генерации программного кода 6
1.2. Automated C++ Program Generator using English Language
Interface 7
1.3. Automatic code generation for C and C++programming .... 7
1.4. Csmith 7
1.5. Liveness-Driven Random Program Generation (ldrgen) 7
1.6. Yarpgen 8
1.7. Deepsmith 8
1.8. SL Random Program Generator 8
1.9. Pyfuzz 8
1.10. Сравнительный анализ найденных инструментов и статей . . 8
1.10.1 Результаты сравнения 11
Глава 2. Разработка инструмента генерации программ 12
2.1. Требования к системе генерации 12
2.2. Схема генерации программ 12
2.3. Промежуточное представление 13
2.4. Шаблоны программ 14
2.5. Архитектура системы 15
2.6. Компоненты системы 17
2.6.1 Веб-сервер 17
2.6.2 Исполнитель программ 17
2.6.3 База данных 17
2.6.4 Сторона клиента 17
2.6.5 Менеджер шаблонов 18
Глава 3. Реализация инструмента генерации программ 19
3.1. Используемые технологии 19
3.1.1 Менеджер шаблонов 19
3.1.2 Веб-сервер 20
3.1.3 База данных 20
3.1.4 Исполнитель программ 20
3.2. Шаблоны программ 21
3.2.1 Внутреннее представление шаблона 21
3.2.2 Конструирование шаблонов 23
3.3. Промежуточное представление (AST) 25
3.4. Генерация текста программы 25
3.5. API 26
3.6. Проверка ответов 27
Заключение 28
Список литературы

В настоящее время знание языка программирования является необходимым для специалиста в отрасли информационных технологий, а обучение им - крайне востребованным. На сегодняшний день программы по обучению языкам программирования есть не только в университетах, но и на различных образовательных платформах в интернете. В связи с ростом числа учащихся подобных курсов и ослабления контакта между студентом и преподавателем острее встает проблема создания учебных материалов, в частности практиче¬ских заданий. Требуется создавать их в большем объеме и в то же время де¬лать их разнообразными во избежание списывания. Специфически для курсов по изучению языков программирования возникает необходимость создания множества примеров программ на определенную тему или по конкретному шаблону. Создание подобных примеров вручную в нескольких вариантах (в идеале по отдельности для каждого ученика) затруднительно. Таким образом, создание удобного программного инструмента, позволяющего автоматиче¬ски генерировать примеры кода на различных языках программирования для учебных задач представляет собой актуальную проблему.
Постановка задачи
Целью данной выпускной работы является создать расширяемый генератор случайных программ для учебных задач, используемых в курсах по обучению языкам программирования.
Основные задачи которые необходимо сделать:
a. Изучить существующие системы генерации случайных программ на предмет возможности их настройки и применимости результатов их работы в учебных целях.
b. Создать систему генерации программ с возможностью настройки параметров для одного языка программирования (Python)
c. Адаптировать систему к возможности поддержки других языков программирования.
Объектом моего исследования являются инструменты генерации программного кода, а предметом исследования — применимость инструментов генерации кода для создания учебных задач.
Данная работа является развитием идеи, изложенной в статье [1], в сторону расширяемости и поддержки разных языков программирования.


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

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

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


Целью и основной задачей дипломной работы было создание генератора программ для обучения программированию. В ходе выполнения работы были получены следующие результаты:
1. Было проведено исследование существующих решений по генерации программ на предмет их применимости в обучающих целях. В ходе исследования были выявлены достоинства и недостатки имеющихся решений.
2. Были сформулированы требования к генератору обучающих программ, учитывающие используемые модели в аналогах, их достоинства и недостатки. Из основных недостатков были выявлены: отсутствие возможности задать основную логику программы; мало функциональные модели задания шаблона кода при их наличии; отсутствие веб-интерфейса; отсутствие возможности хранения шаблонов и сгенерированных программ; отсутствие возможности генерации изображений.
3. Был реализован инструмент генерации программ, поддерживающий управление шаблонами кода, имеющий потенциал к расширению в сторону поддержки новых языков программирования, в настоящий момент поддерживающий генерацию кода на языке Python с помощью основных синтаксических конструкций.
Таким образом, цель данной работы достигнута в полном объеме.



[1] А Хафизова и М Заславский. «Генератор случайных программ как инструмент обучения программированию». В: СБОРНИК ДОКЛАДОВ СТУДЕНТОВ И АСПИРАНТОВ НА КОНФЕРЕНЦИИ ПРОФЕССОРСКО-ПРЕПОДАВАТЕЛЬСКОГО СОСТАВА. 2019, с. 191.
[2] Ambuj Kumar и Saroj Kaushik. «Automated C++ Program Generator using English Language Interface». В: ().
[3] S. Patade и др. «AUTOMATIC CODE GENERATION FOR C AND C++ PROGRAMMING». В: IRJET 08 (05 2021), с. 4732—4736.
[4] Xuejun Yang и др. Csmith. URL:https : / /embed . cs . utah . edu/csmith/ (дата обр. 10.05.2022).
[5] Gergo Barany. «Liveness-driven random program generation». В: International Symposium on Logic-Based Program Synthesis and Transformation. Springer. 2017, с. 112—127.
[6] Intel. Yarpgen. URL:https : //github . com/intel/yarpgen (дата обр. 10.05.2022).
[7] Chris Cummins и др. «Compiler fuzzing through deep learning». В: Proceedings of the 27th ACM SIGSOFT International Symposium on Software Testing and Analysis. 2018, с. 95—105.
[8] Ariel Baruch. SL Random Program Generator. URL:https : //www .cs.bgu.ac.il/~arielbar/sl/#/code (дата обр. 10.05.2022).
[9] Steven Myint. pyfuzz. URL:https : / /github . com/myint/pyfuzz(дата обр. 10.05.2022).
[10] Steven Myint. Random Python Program Generator. URL:https : //www.4geeks.de/cgi-bin/webgen.py (дата обр. 10.05.2022).
[11] AST. URL:https://en.wikipedia.org/wiki/Abstract_syntax_tree (дата обр. 15.05.2022).
[12] ECMA International. Standard ECMA-404. The JSONData Interchange Format. 2017.
[13] Moodle. URL:https : / / moodle . org / ?lang = ru (дата обр. 15.05.2022).
[14] Jemerov D. и Isakova S. Kotlin in action. Manning Publications Company, 2017.
[15] Docker. URL:https://www.docker.com/ (дата обр. 10.05.2022).
[16] docker-compose. URL:https : //docs . docker. com/compose/ (дата обр. 10.05.2022).
[17] JetBrains. Kotlinx.serialization. URL:https://github.com/Kotlin/kotlinx.serialization (дата обр. 18.05.2022).
[18] JetBrains. Ktor. URL:https://ktor.io/ (дата обр. 10.05.2022).
[19] MongoDB. MongoDB. URL:https : //www . mongodb . com/try/download/community (дата обр. 18.05.2022).
[20] Simon Josefsson. The Base16, Base32, and Base64 Data Encodings. RFC 4648. Окт. 2006. DOI:10 . 17487/RFC4648. URL:https : //www.rfc-editor.org/info/rfc4648.
[21] Georg Brandl и Matthaus Chajdas. Pygments. URL:https : / /pygments.org (дата обр. 18.05.2022).
[22] Python. URL:https://www.python.org/ (дата обр. 18.05.2022).
[23] Georg Brandl и Matthaus Chajdas. Pygments: supported languages. URL:https://pygments.org/languages (дата обр. 18.05.2022).
[24] Hideo Hattori и Steven Myint. autopep8. URL:https : //pypi . org/project/autopep8/ (дата обр. 18.05.2022).
[25] Singleton. URL:https : //ru . wikipedia. org/wiki/%D0%9E%D0%B4%D0%B8%D0%BD%D0%BE%D1%87%D0%BA%D0%B0_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)(дата обр. 29.05.2022).
[26] Динамическая типизация.URL:https ://ru. wikipedia . org/wiki/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%82%D0%B8%D0%BF%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F) (дата обр. 29.05.2022).
[27] Jemerov D. и Isakova S. «Kotlin in action.» В: Manning Publications Company, 2017. Гл. 11. Конструирование DSL, с. 346—380.
[28] Kotlin infix notation. URL:https : //kotlinlang . org/docs/functions.html#infix-notation (дата обр. 29.05.2022).
[29] Jemerov D. и Isakova S. «Kotlin in action.» В: Manning Publications Company, 2017. Гл. 9.3. Вариантность: обобщенные типы и подтипы, с. 300—310.


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



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


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