По сути, это то же самое, что задавать вопрос «учитывая некоторые требования времени выполнения, есть ли способ генерировать все возможные программы (наиболее эффективные или наименее эффективные), которые бы соответствовали этим требованиям для данного ввода?» Ответ: да , есть способ сделать это, но число результатов бесконечно, ограничено только пределами разумных ограничений памяти и реализации языка, так что вы ' Вам нужно будет наложить ограничения на то, что составляет действительную «программу» для ваших целей, чтобы сократить ее до конечного набора.
Например, вы можете ограничиться определенной грамматикой, представляющей подмножество рассматриваемого языка регулярных выражений, и генерировать только регулярные выражения, соответствующие этой грамматике:
Regex ::= StartAnchor? Anything? (Substring | Anything) Anything? EndAnchor?
StartAnchor ::= "^"
Anything ::= ".*"
| "(.*)"
Substring ::= "orange"
| "(orange)"
EndAnchor ::= "$"
Рекурсивно использовать все пути этой грамматики (то есть каждую ветвь, обозначенную ?
и |
), чтобы сгенерировать все ваши целевые регулярные выражения. Конечно, этот ответ намеренно ничего не говорит о том, является ли это хорошей идеей или вообще необходимой ...