Я разрабатываю программу, которая извлекает текст из других программ.Одна из особенностей заключается в том, что пользователи могут указывать «сценарии замены» для обработки текста.Пример сценария замены:
|ORIG|a|BECOMES|bb|END|
|ORIG|b|BECOMES|cc|END|
Процесс замены ищет любой текст ORIG
и заменяет его соответствующим текстом BECOMES
.Таким образом, если текст aaaa
был извлечен, он был бы заменен сначала на bbbbbbbb
, а затем на cccccccccccccccc
.
Проблема возникает, когда существует сценарий замены, подобный этому:
|ORIG|a|BECOMES|bb|END|
|ORIG|b|BECOMES|aa|END|
и в извлеченном тексте есть a
.Это a
становится bb
, которое становится aaaa
, которое становится bbbbbbbb
и т. Д. Для бесконечности.
Таким образом, мне нужно два алгоритма: 1. Прочитать сценарий замены и определить, может ли он создатьбесконечный цикл (поэтому я могу предупредить пользователя).2. Обнаружить бесконечный цикл при выполнении сценария замены (чтобы я мог прервать операцию и уведомить пользователя).
Понятия не имею, с чего начать.Я думал об этом более двух недель и ничего не получил.