@Esterbit

Как сделать автоматический набор кода?

Я хочу сделать программу, которая будет генерировать случайный, но синтаксически корректный код на питоне. Однако, как я понимаю, метапрограммирование в Python позволяет лишь создать класс и его наполнение. Мне же нужно чтобы весь код писался сам, а я имел бы возможность наблюдать за этим.
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Используй методы формальных грамматик (термин для гугла).
Представим генерируемый текст как последовательность символов (символ != буква).
У нас есть терминальные символы - это строки, которые будут встречаться в итоговом тексте. Например: "if", "for", ":"
У нас есть нетерминальные символы - это обозначения сущностей в тексте. Например: ПРИСВАИВАНИЕ, ВЕТВЛЕНИЕ, ОПЕРАТОР, КЛАСС
У нас есть аксиома - нетерминальный символ, с которого мы начинаем генерацию. Например, ПРОГРАММА.
И, самое главное, у нас есть правила замены одних символов другими.
Например:
ПРИСВАИВАНИЕ = ПЕРЕМЕННАЯ "=" ВЫРАЖЕНИЕ

Один символ может заменяться по нескольким правилам - выбор случаен (возможно с некоторым весом?)
ВЕТВЛЕНИЕ = "if" ВЫРАЖЕНИЕ ":\n" ОТСТУП+ ОПЕРАТОРЫ ОТСТУП-
ВЕТВЛЕНИЕ = "if" ВЫРАЖЕНИЕ ":\n" ОТСТУП+ ОПЕРАТОРЫ ОТСТУП- "else:\n" ОТСТУП+ ОПЕРАТОРЫ ОТСТУП-

Чтобы генерировать цепочки символов, используй рекурсию. Первое правило продолжает цепочку, второе - прерывает.
ОПЕРАТОРЫ = ОПЕРАТОРЫ "\n" ОПЕРАТОР
ОПЕРАТОРЫ = ОПЕРАТОР

Тебе также потребуется хранить некое глобальное состояние - использованные имена функций и переменных, текущий отступ, и т.п. То есть у тебя замена символа может требовать дополнительной логики, как для ОТСТУП+ и ОТСТУП-.

Правила замены применяются до тех пор, пока в цепочке символов остался хотя бы один нетерминал.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dmshar
Я знаю, что существует приложения по типу Serenade или Talon, которые позволяют осуществить голосовой набор кода, мне бы хотелось узнать, возможно ли осуществить подобное на Python и если да, то что для этого требуется.
Мне кажется, ответ совершенно очевиден для любого, кто реально является квалифицированным разработчиком.
1. Разобраться и написать - возможно самому, а возможно путем вскрытия/изучения хотя-бы указанных пакетов - как это все должно будет выглядеть.
2. Составить ТЗ на разработку с - желательно - максимально подробным описанием алгоритмов, которые при этом будут задействованы.
3. По дороге понять, не просто "что потребуется", а специалисты в каких областях потребуются для разработки такого софта, а потом - найти и нанять таких специалистов на работу.
4. Организовать процесс разработки.

Если вы скажете, что все это очевидно - то полностью соглашусь, да все это полностью очевидно, но уж какой вопрос - такой и ответ.

По ходу - несколько замечаний.
1. Практически все, что делается с помощью других языков программирования можно реализовать и на Python. Вопрос только в удобстве и скорости разработки и в эффективности полученных программных продуктов.
2. "Для этого" - совершенно очевидно - требуется хорошо знать возможности Python.
3. Сама задача - создавать код "с голоса" - задача весьма сомнительной пользы. Кому она нужна? Инвалидам без рук? Или тому кто хочет диктовать (кстати - что именно? Саму программу, написанную предварительно на листочке?) и одновременно жевать бутерброд, "наблюдая" за процессом составления кода? Или школьнику, не осилившему изучения языка программирования и мечтающему, что-бы это за него делала программа?
4. Абсолютно уверен, что даже если такая программа будет создана, ни скорость разработки ни даже качество конечного продукта не будут улучшены по сравнению с теми инструментами, которые имеются сегодня в наличии.
5. Что бы понять, каково будет работать с таким продуктом - попробуйте поработать с намного более простым приложением - любым голосовым ассистентом, оцените его "удобства и преимущества" по сравнению с непосредственной. традиционной работой системы. А за одно почитайте, какие коллективы разработчиков трудились над созданием такого продукта.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы