Почему рекурсивное регулярное выражение не является регулярным выражением? - PullRequest
9 голосов
/ 13 февраля 2010

Я читал некоторые ответы в этом вопросе и увидел, что несколько человек сказали, что рекурсивные регулярные выражения не являются строго говоря регулярными выражениями.

Почему это?

Ответы [ 4 ]

17 голосов
/ 13 февраля 2010

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

Например, язык, описанный

(a+)b+\1

не является регулярным, поскольку вы не можете принудительно заставить a появляться одинаковое количество раз до и после b с. По крайней мере, не на обычном языке. С контекстно-свободными или даже контекстно-зависимыми языками это совсем другое дело.

Однако регулярные выражения, которые используют только элементарные вещи, такие как различные квантификаторы, классы символов и т. Д. обычно , все еще описывают обычные языки.

15 голосов
/ 13 февраля 2010

Все обычные языки могут распознаваться конечным автоматом . Конечный автомат имеет конечное число состояний и, следовательно, конечную память (отсюда и название). Рекурсивное «регулярное» выражение требует потенциально бесконечного пространства стека для выполнения рекурсии, поэтому его невозможно распознать с помощью конечного автомата, поэтому оно не является регулярным.

11 голосов
/ 13 февраля 2010

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

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

С Введение в формальные языки и автоматы от Питера Линца (стр. 115, 3-е изд.):

Теорема 4.8

Пусть L - бесконечный регулярный язык. Тогда существует некоторое положительное целое число m , такое что любое w L с | w | ≥ м можно разложить на

w = xyz ,

с

| ху | ≤ м ,

* * И тысяча сорок-девять

| у | ≥ 1,

такой, что

ш i = xy i z - уравнение (4,2)

также в L для всех i = 0, 1, 2,…

Чтобы распознать бесконечный язык, конечный автомат должен «прокачать» или повторить некоторую часть его состояний, и это функция y i (запись для некоторой строки у повторяется я раз).

Почти все доказательства, включающие лемму накачки, включают в себя доказательство от противного. На странице 117 автор доказывает, что язык L = { a n b n : n ≥ 0} - т.е. , строки вида aaa… bbb… , где подстроки all- a и all- b равны в длина - не является регулярной:

Предположим, что L регулярно, так что лемма прокачки должна выполняться. Мы не знаем значение m , но что бы это ни было, мы всегда можем выбрать n = m . Следовательно, подстрока y должна полностью состоять из a . Предположим, что | y | = k . Тогда строка, полученная с использованием i = 0 в уравнении (4.2), равна

ш 0 = а м-к б м

и явно не в L . Это противоречит лемме накачки и, следовательно, указывает на то, что предположение о регулярности L должно быть ложным.

Другие примеры языков, которые не являются регулярными:

  • L = { ш. R : ш ∈ Σ *} - т.е. , палиндромы
  • L = { ш ∈ Σ *: n a ( ш ) <<em> n b ( w )} - т.е. , число a s меньше, чем число б S
  • L = { a n! : n ≥ 0}
  • L = { a n b l : n l }
  • L = { a n b l : n + l простое число}

Оказывается, что то, что мы обычно называем регулярными выражениями, значительно мощнее: сопоставление регулярных выражений с обратными ссылками NP-hard !

4 голосов
/ 13 февраля 2010

Основа других ответов требует понимания теории вычислений.Если ваше единственное знакомство с регулярными выражениями происходит в среде программирования, вы можете не понимать, что регулярные выражения также являются математическими конструкциями.Статья в Википедии о регулярных выражениях может дать некоторое представление о теоретических аспектах регулярных выражений.

...