Генератор строки по шаблону
От: snoopy  
Дата: 21.08.03 16:30
Оценка:
Имеется необходимость сгенерировать строку по шаблону. Шаблон необходимо задать примерно в виде, в котором пишутся регулярные выражения.
подскажите, пожалуйста, где можно посмотреть информацию или исходники по этому вопросу?
Re: Генератор строки по шаблону
От: DOOM Россия  
Дата: 22.08.03 03:50
Оценка:
Здравствуйте, snoopy, Вы писали:

S>Имеется необходимость сгенерировать строку по шаблону. Шаблон необходимо задать примерно в виде, в котором пишутся регулярные выражения.

S>подскажите, пожалуйста, где можно посмотреть информацию или исходники по этому вопросу?

Нужно сформировать произвольную строку принадлежащую к языку, описываемому данным регулярным выражением? Или все возможные строки?
Re[2]: Генератор строки по шаблону
От: snoopy  
Дата: 22.08.03 06:25
Оценка:
Здравствуйте, DOOM, Вы писали:

DOO>Здравствуйте, snoopy, Вы писали:


S>>Имеется необходимость сгенерировать строку по шаблону. Шаблон необходимо задать примерно в виде, в котором пишутся регулярные выражения.

S>>подскажите, пожалуйста, где можно посмотреть информацию или исходники по этому вопросу?

DOO>Нужно сформировать произвольную строку принадлежащую к языку, описываемому данным регулярным выражением? Или все возможные строки?


Спасибо за внимание.
Необходимо сформировать строки вида, например:
475635543390
475635543391
475635543392
....
т.е. получить все возможные строки,
где в качестве шаблона указавать тип цифры и их количество
Re[3]: Генератор строки по шаблону
От: jhfrek Россия  
Дата: 22.08.03 06:41
Оценка:
Здравствуйте, snoopy, Вы писали:

S>т.е. получить все возможные строки,

S>где в качестве шаблона указавать тип цифры и их количество

А так не пойдет?


Initialize(СписокСтрок);
while (!конецшаблона()) do begin

  Лексема := ПолучитьЛексему(Шаблон);
  case лексема of
    ТипЛексема1: ДобавитьЦифрыДляТипЛексема1(СписокСтрок);

  ...
  end
end
Re[4]: Генератор строки по шаблону
От: snoopy  
Дата: 22.08.03 06:53
Оценка:
Здравствуйте, jhfrek, Вы писали:

J>А так не пойдет?


J>
J>Initialize(СписокСтрок);
J>while (!конецшаблона()) do begin

J>  Лексема := ПолучитьЛексему(Шаблон);
J>  case лексема of
J>    ТипЛексема1: ДобавитьЦифрыДляТипЛексема1(СписокСтрок);

J>  ...
J>  end
J>end
J>


в принципе подходит, но реализация функций ПолучитьЛексему(Шаблон)
и ДобавитьЦифрыДляТипЛексемаNNN(СписокСтрок) становится нетривиальной задачей
Может все же подскажете путь с использованием регулярных выражений?
Если эти выражения в общем используются для разделения и поиска строк,
так почему их не использовать для их формирования?
Re[5]: Генератор строки по шаблону
От: Кодт Россия  
Дата: 22.08.03 09:29
Оценка:
Здравствуйте, snoopy, Вы писали:

S>Может все же подскажете путь с использованием регулярных выражений?

S>Если эти выражения в общем используются для разделения и поиска строк,
S>так почему их не использовать для их формирования?

Потому что разбор строки — это детерминированная задача, а генерация — нет.
Простой пример: грамматика
буква -> 0 | 1
строка -> буква | буква строка


Одну произвольную строку, естественно, родить несложно. В каждом случае выбора (между 0 и 1, между концом и продолжением) — кидаем монетку. И то, нет гарантии, что процесс когда-либо остановится.

А уж заниматься перебором... Слово состояния машины-генератора оказывается равно всем выборам, совершенным при порождении последней строки; в следующий шаг мы меняем последний выбор и пытаемся вывести строку дальше.

Если грамматика не ограничивает сверху длину строки, то, очевидно, и слово состояния генератора может оказаться бесконечным.
Перекуём баги на фичи!
Re[6]: Генератор строки по шаблону
От: jhfrek Россия  
Дата: 22.08.03 09:51
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Потому что разбор строки — это детерминированная задача, а генерация — нет.

К>Простой пример: грамматика

Угу, но может все-таки нужны не регулярные выражения? Может нужно что-то вроде Дельфийских масок?
Re[7]: Генератор строки по шаблону
От: Кодт Россия  
Дата: 22.08.03 10:25
Оценка:
Здравствуйте, jhfrek, Вы писали:

J>Угу, но может все-таки нужны не регулярные выражения? Может нужно что-то вроде Дельфийских масок?


Есть много нотаций для грамматик. Это БНФ, РБНФ, регулярные выражения в стиле Perl и Emacs, и т.п.
Суть от этого не меняется.
Если мощность (количество возможных строк) языка, счетна или более, то автомат-генератор должен иметь бесконечное слово состояния.

В некоторых случаях, если можно разбить язык на конечные подмножества, мы можем сделать генераторы для каждого из этих подмножеств и последовательно отработать каждый из них.
Например: простая грамматика
 S -> (a|b|c|d)*

элементарно строится генератор строк длины N.
Последовательно выполняем генерацию строк длины 0, 1, 2, ... пока не надоест.
Перекуём баги на фичи!
Re[7]: Генератор строки по шаблону
От: snoopy  
Дата: 22.08.03 11:20
Оценка:
Здравствуйте, jhfrek, Вы писали:

J>Здравствуйте, Кодт, Вы писали:


К>>Потому что разбор строки — это детерминированная задача, а генерация — нет.

К>>Простой пример: грамматика

J>Угу, но может все-таки нужны не регулярные выражения? Может нужно что-то вроде Дельфийских масок?

Согласен, действительно нужто что-то, похожее на маски в Delphi
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.