Большинство современных реализаций регулярных выражений, таких как perl или .NET, выходят за рамки классического компьютерного определения REGEX с такими функциями, как lookahead и lookbehind. Позволяют ли эти функции анализировать операторы, которые не могут быть описаны конечным автоматом без нажатия? Насколько ближе к завершению это делает их, если они могут?
19
Ответы:
Я не думаю, что настоящая проблема заключается в том, что означает неограниченное; это не хуже любой другой ситуации при разборе.
Проблема заключается в характеристике обратных ссылок, которые являются одновременно очень мощными и очень ограниченными: они позволяют описывать некоторые неконтекстно-свободные языки, не допуская использования некоторых контекстно-свободных языков. Например, регулярное выражениеan⋅b⋅an⋅b⋅an
(a*)b\1b\1
соответствует строкам вида п ⋅ б ⋅ п ⋅ б ⋅ п , и вы можете использовать насосную лемму , чтобы показать , что это не контекстно-свободный язык. Однако, с другой стороны, регулярные выражения с обратными ссылками не кажутся достаточными для соответствия языку сбалансированных скобок, который является прототипным языком без контекста.Достаточно просто дать денотационную семантику, в которой говорится о том, какие строки есть в языке для регулярных выражений, но дать хорошую теоретико-автоматную характеристику кажется гораздо более сложной задачей. Это что-то вроде регистрационной машины, в чьи регистры вы можете копировать подстроки вашего ввода, и которую вы можете использовать для проверки вашей текущей строки, но для которой у вас нет возможности изменять эти регистры.
У людей, занимающихся теорией конечных моделей, есть куча модных моделей машин, и было бы интересно узнать, соответствует ли это какой-либо из их моделей.
источник
/(.*)\1/
Но в принципе регулярные выражения, как указано, являются более мощными, чем обычные языки, поскольку этот связанный с этим вопрос обсуждается гораздо более подробно (также с изящным примером).
источник
Один интересный результат, взятый из этого другого вопроса , также связанного Сурешем Венкатом, состоит в том, что «практические» регулярные выражения являются NP-полными, и поэтому они должны быть эквивалентны по мощности SAT.
Будучи не экспертом, хотя я согласен с тем, что интуитивно «регулярных выражений с обратными ссылками кажется недостаточно для соответствия языку сбалансированных скобок», происходит нечто странное. NP-полнота подразумевает, что любая NP-проблема может быть полиномиально сведена к регулярному выражению, поэтому, вероятно, существует просто полиномиальное сокращение от языка «сбалансированных скобок» до того, который можно распознать с помощью регулярных выражений. Но опять же, может быть какое-то абсурдное регулярное выражение для разбора CFL, так как они могут даже разбирать непростые унарные числа!
Вероятно, урок заключается в том, что классы сложности и языковые классы в целом несопоставимы. Что также предлагает перефразировать ваш вопрос, ссылаясь на иерархию Хомского, а не на «шкалу сложности» (даже если честно, меня это не смутило).
Чарльз Стюарт пишет:
Частичный предварительный просмотр (по крайней мере, утверждения) можно найти в Google Книгах , на странице 289, а библиографическую ссылку на статью можно найти здесь . Обратите внимание, что в статье rewbr расшифровывается как Regular Expression With BackReferences.
источник
PCRE, самая популярная реализация «регулярных выражений», также реализует рекурсивные шаблоны, которые выходят за рамки обратных ссылок. Вопросы об их сложности только что задавались в Stackoverflow. Согласно практическому подробному ответу Perl guru brian d foy, это делает PCRE таким же мощным, как и контекстно-свободные грамматики. Однако синтаксис ужасен по сравнению с формой Бэкуса-Наура.
источник