Де більшість реалізацій REGEX потрапляють за шкалою складності?


19

Більшість сучасних реалізацій регулярних виразів, таких як perl або .NET, виходять за рамки класичного визначення інформатики REGEXes з такими функціями, як lookahead та lookbehind. Чи дозволяють ці функції розбирати оператори, які неможливо описати за допомогою кінцевого автоматичного автоматичного автоматичного відключення? Наскільки ближче до цірінга завершує це, якщо вони можуть?


2
Питання, що пов'язані між собою: Чи є у нас щось цікаве між "регулярними регексами з зворотними посиланнями" та "регексами, які можуть містити довільний програмний код"? Наприклад, чи режекси з зворотними переглядами та виворітними очима / виглядів позаду суворо виразніші, ніж регексери із зворотними посиланнями, але відсутність пошуку / позаду? Що про "Спеціальні контрольні дієслова зворотного зв'язку" в Perl?
Jukka Suomela

Пов’язані (і, можливо, неправильні): stackoverflow.com/questions/2974210/…
Aryabhata

Відповіді:


18

Я не думаю, що справжньою проблемою є питання про те, що означає без обмежень; це не гірше, ніж будь-яка інша ситуація при розборі.

Проблема полягає в характеристиці зворотних посилань, які є і дуже потужними, і дуже обмеженими: вони дозволяють описувати деякі безконтекстні мови, не допускаючи якихось без контекстних мов. Наприклад, регулярний вираз (a*)b\1b\1відповідає рядкам форми , і ви можете використовувати накачувальну лему, щоб показати, що це не контекстна мова. Однак, з іншого боку, регулярні вирази з зворотними посиланнями не здаються достатніми, щоб відповідати збалансованій дужці, що є прототиповою мовою без контексту.anbanban

Досить просто дати денотаційну семантику, яка говорить про те, що рядки є мовою до виразів, але надання хорошої автоматико-теоретичної характеристики здається набагато складнішим. Це щось на зразок машини реєстру, в регістри якого ви можете скопіювати підрядки вашого вводу, і якими ви можете скористатися для перевірки поточної рядки проти, але для якої вам не потрібна можливість змінювати ці регістри.

Люди, які займаються теорією кінцевих моделей, мають купу прикольних моделей машин, і було б цікаво дізнатися, чи відповідає це будь-якій їх моделі.


9

/(.*)\1/L={ww|wΣ}wKLK={ww|wΣ,w∣≤K}K

Але, в принципі, регулярні вирази, як зазначено, є більш потужними, ніж звичайні мови, оскільки це пов'язане питання обговорюється набагато детальніше (з витонченим прикладом).


Чи не {ww | w ∈ Σ ∗, ∣w∣≤K} було б впізнаваним CSL або TM ??
dhruvbird

арггг. повинен був зробити ww ^ R. виправимо. дякую
Суреш Венкат

Власне, у мене виникло питання з цього приводу. Чи є ww CSL чи впізнається? Я не (ще) не міг придумати LBA для цього, тому просто цікаво ...
dhruvbird

1
{шш:шΣ}

5

Один цікавий результат, взятий з цього іншого питання , також пов'язаного Сурешем Венкатом, - це те, що «практичні» регулярні виразки не є NP-завершеними, і тому вони повинні бути еквівалентними за потужністю SAT.

Будучи неекспертом, хоча я погоджуюся, що інтуїтивно "зворотні звороти з зворотними відношеннями не здаються достатніми, щоб відповідати збалансованій дужці", відбувається щось дивне. NP-повнота означає, що будь-яка проблема NP може бути поліноміально зведена до регулярного виразів, тому, ймовірно, існує лише поліноміальне скорочення з мови "збалансованих дужок" до такої, яку можна впізнати за допомогою регулярних виразів. Але знову ж таки, може бути якийсь абсурдний регулярний вираз для аналізу CFL, оскільки вони можуть навіть розбирати непрості одинарні номери!

Напевно, урок полягає в тому, що класи складності та уроки мови взагалі не порівнянні. Що також пропонує перефразовувати ваше питання, щоб посилатися на ієрархію Хомського, а не на "шкалу складності" (навіть якщо, якщо чесно, мене це не бентежило).

Чарльз Стюарт пише:

Aho, 1990 р. "Алгоритми знаходження шаблонів у рядках" показують, що проблема членства для звичайних мов із зворотним відстеженням є NP повною.

Частковий попередній перегляд (принаймні твердження) можна знайти в Google Книгах на сторінці 289, а бібліографічні посилання на папір можна знайти тут . Зауважте, що у статті rewbr означає "Регулярне вираження із зворотними референціями".


3

PCRE, найпопулярніша реалізація "регулярних виразів", також реалізує рекурсивні шаблони, що виходять за межі зворотних посилань. Питання про їх складність щойно задавали в Stackoverflow. Відповідно до практичного і глибокого відповіді гуру Perl Брайана д фоя, це робить PCRE настільки ж потужним, як і без контекстних граматик. Однак синтаксис жахливий у порівнянні з формою Backus-Naur.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.