Создайте программу, которая вводит регулярное выражение и выходные строки, которые удовлетворяют то регулярное выражение

Для doument код я использую Doxigen. Я предпочитаю версию Linux, я имел, имеют проблемы с несколькими функциями в версии Windows

13
задан Ian Boyd 28 January 2015 в 22:19
поделиться

4 ответа

Регулярное выражение можно преобразовать в DFA, который можно рассматривать как график. Чтобы сгенерировать строку с учетом этого DFA-графа, вам нужно просто найти путь от начального состояния к конечному состоянию. Вам просто нужно подумать о том, как вы хотите обрабатывать циклы (может быть, пройти каждый цикл хотя бы один раз, чтобы получить выборку? N раз?), Но я не понимаю, почему это не сработает.

10
ответ дан 2 December 2019 в 00:18
поделиться

Это можно сделать, обойдя DFA (включает псевдокод) или путем прямого обхода дерева абстрактного синтаксиса регулярного выражения или сначала преобразование в NFA, как объяснено в Doug McIlroy : paper и Haskell code . (Он считает, что подход NFA работает быстрее, но он не сравнивал его с DFA.)

Все они работают с регулярными выражениями без обратных ссылок, то есть с «настоящими» регулярными выражениями, а не с регулярными выражениями Perl. . Для обработки дополнительных функций Perl проще всего добавить постфильтр.

Добавлено: код для этого на Python, автор Питер Норвиг и я.

2
ответ дан 2 December 2019 в 00:18
поделиться

Самый простой способ реализовать, но определенно наиболее требовательный к процессору, - это просто перебрать его. Настройте таблицу символов с символами, которые должна содержать ваша строка, а затем просто последовательно сгенерируйте строки и выполните для них Regex.IsMatch.

0
ответ дан 2 December 2019 в 00:18
поделиться

Я лично считаю, что это Святой Грааль reg-ex. Если бы вы могли реализовать это - даже если бы работало только 3/4 - я не сомневаюсь, что вы бы разбогатели примерно за 5 минут.

Если не считать шуток, я не уверен, что то, чего вы действительно добиваетесь, возможно. Reg-Ex - это очень открытый, гибкий язык, и дать компьютеру достаточно образцов ввода, чтобы действительно и точно найти то, что вам нужно, вероятно, невозможно.

Если я ошибаюсь, я желаю этому разработчику славы.

Если взглянуть на это с другой точки зрения, это почти (не совсем) то же самое, что дать компьютеру выходные данные и заставить его - на основе этого - написать для вас программу. Это немного за бортом, но это как бы иллюстрирует мою точку зрения.

0
ответ дан 2 December 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: