Регулярные выражения в формальном определении, состоящие только из:
- конкатенация (ab)
- неограниченное повторение (a *)
- альтернирование (a |б)
- группировка ((ab) | (cd))
может распознавать только обычные языки.Язык программирования, полный по Тьюрингу, может распознавать рекурсивно перечислимые языки.
Например, регулярные выражения не могут сообщить вам, состоит ли строка из совпадающих пар скобок: например, ()(())
принимается, а ()((())()
отклоняетсяв то время как языки программирования, полные по Тьюрингу, могут.
(Обратите внимание, что регулярные выражения в современных языках программирования более мощны, чем формальное академическое определение регулярных выражений. Некоторые могут даже быть полными по Тьюрингу.)