Описание тега regular-language
Для данного алфавита (конечного набора символов) Σ язык - это набор всех последовательностей таких символов в этом алфавите. Язык является регулярным языком именно тогда, когда он может быть выражен в терминах (формального) регулярного выражения, а принадлежность любой строки может быть определена конечным автоматом.
Регулярные языки принадлежат к высшей иерархии Иерархии Хомского и также называются грамматиками типа 3. Они находятся над контекстно-свободными языками типа 2, которые распознаются автоматами выталкивания, которые находятся над контекстно-зависимыми языками типа 1, распознаваемыми линейно ограниченными автоматами, и над рекурсивно перечисляемыми языками типа 0, которые могут быть распознаны Тьюрингом. Машины. Все обычные языки контекстно-зависимы, контекстно-зависимы и рекурсивно перечисляемы. Формальные регулярные выражения могут быть преобразованы в детерминированные конечные машины и в недетерминированные конечные машины, и при этом они будут представлять тот же регулярный язык.
Пожалуйста, не путайте это с регулярным выражением. Большинство механизмов регулярных выражений гораздо выразительнее формальных регулярных выражений, конечных автоматов и могут представлять нерегулярные языки.
Построение регулярного языка
Множество всех регулярных языков над заданным алфавитом Σ может быть получено точно таким образом:
- Пустой язык
{}
, отклоняя все строки. - Язык, содержащий только пустую строку
ε
- Все языки, содержащие только один символ
s ∈ Σ
. - Каждый язык создан путем объединения, конкатенации или клейни-звезды обычных языков. Предположим
v
а такжеw
строки обычного языкаA
а такжеB
соответственно:- Союз
(v|w)
также является регулярным. Он принимает языки на любом изA
илиB
. - Конкатенация
vw
также является регулярным. - Клини-звезда
v*
также является регулярным. Это означает любые копии строк вA
конкатенированные, включая 0.
- Союз
Примеры и не примеры обычных языков
Учитывая простой алфавит
Σ = {0, 1}
, где|
представляет союз,*
представляет собой звезду клини, все эти формальные регулярные выражения представляют собой обычный язык:- Регулярное выражение
"0"
,"1"
,"(0|1)"
,"01"
,"11"
,"0*"
все обычные. - Регулярное выражение
"(0(0|1)*1)"
, представляющий все двоичные строки, начинающиеся с 0 и заканчивающиеся на 1, является регулярным. - Учитывая регулярное выражение
R
, язык"R+"
а также"R?"
все представляют собой обычный язык, тогда как+
представляет собой один или несколько, и?
представляет ноль или один. А именно,"R+"
эквивалентно"RR*"
, а также"R?"
эквивалентно"(R|ε)"
. - Учитывая регулярное выражение
R
, язык"R{m,n}"
регулярно для всех естественныхm,n
, где{m,n}
представляет "отm
копии вn
копий ". Это связано с тем, что он также включает объединение и объединение:"R{1,3}"
расширяется до"(R|RR|RRR)"
.
- Регулярное выражение
Учитывая алфавит, используемый механизмами регулярных выражений, обычно это алфавит ASCII или Unicode, содержащий все символы ASCII или Unicode соответственно:
- Регулярное выражение
/^.+$/
регулярно. Он включает в себя все непустые последовательности любого символа. - Регулярное выражение
/^#[A-Za-z]{1,3}[0-9]{2,4}$/
представляет собой обычный язык, состоящий из всех строк с хэштегом, затем от одной до трех букв ASCII, за которыми следуют от двух до четырех десятичных цифр. - Регулярное выражение
/^([\d][\w])*$/
представляет собой обычный язык. Он состоит из всех строк, в которых чередуются символы цифр и символы слова. Стенография\d
а также\w
примеры союза.
- Регулярное выражение
Многие движки регулярных выражений намного выразительнее обычных языков. Обратные ссылки могут привести к тому, что регулярное выражение будет представлять нерегулярный язык, и, следовательно, они не могут быть определены конечным автоматом.
- Регулярное выражение
"(.+)\1"
представляет собой нерегулярный язык. Вовлечение обратной ссылки для захвата первой группы.+
, он принимает все последовательности прописных латинских букв, повторяющиеся ровно дважды. В формальной теории языка они называются квадратами."ABCABC"
,"1234.1234."
принимаются"ABCAB"
,"1234567891234567890"
отклоняются.
- Регулярное выражение
Дальнейшее чтение
- regex: сокращение от регулярного выражения. Многие механизмы регулярных выражений в настоящее время гораздо более выразительны, чем формальные регулярные выражения и конечные автоматы.
- конечный автомат: они эквивалентны по выразительности формальным регулярным выражениям. Они представляют собой в точности обычные языки. Акронимы включают FSM.
- dfa: Детерминированный конечный автомат. nfa Недетерминированный конечный автомат.
- Оба равнозначны по выразительности.
- контекстно-свободная грамматика, контекстно-зависимая грамматика: теги, относящиеся к более низким уровням иерархии Хомского
- Википедия, включает объяснения о квадратах и неправильных регулярных выражениях.
- Что такое обычный язык?