Введение

Формальный язык, который может быть описан с помощью регулярного выражения, и естественный язык, которому присущи закономерности.

В теоретической информатике и теории формальных языков, регулярный язык (также называемый рациональным языком) назван в честь американского математика Стивена Коула Клини. В иерархии Чомского, регулярные языки – это языки, порождаемые грамматиками 3-го типа.

Примеры

Все конечные языки регулярны; в частности, язык пустой строки {ε} = Ø* является регулярным. Другие типичные примеры включают язык, состоящий из всех строк над алфавитом {a, b}, которые содержат четное число символов 'a', или язык, состоящий из всех строк вида: несколько символов 'a', за которыми следуют несколько символов 'b'. Простым примером языка, который не является регулярным, является множество строк {anbn | n ≥ 0}. Интуитивно, его нельзя распознать с помощью конечного автомата, поскольку конечный автомат обладает конечной памятью и не может запомнить точное количество символов 'a'. Методы строгого доказательства этого факта приведены ниже.

Результаты сложности

В теории вычислительной сложности класс сложности всех регулярных языков иногда называют REGULAR или REG и равен DSPACE(O(1)) – классу задач принятия решений, которые могут быть решены в постоянном объеме памяти (объем используемой памяти не зависит от размера входных данных). REGULAR ≠ AC0, поскольку он (тривиально) содержит задачу определения четности/нечетности числа единиц во входных данных, и эта задача не принадлежит классу AC0. С другой стороны, REGULAR не включает AC0, так как нерегулярный язык палиндромов или другой нерегулярный язык могут быть распознаны в AC0. Если язык не является регулярным, для его распознавания требуется машина с объемом памяти не менее Ω(log log n) (где n – размер входных данных). Иными словами, DSPACE(o(log log n)) равен классу регулярных языков. На практике большинство нерегулярных задач решаются машинами, использующими как минимум логарифмический объем памяти.

Обобщения

Понятие регулярного языка было обобщено на бесконечные слова (см. ω-автоматы) и на деревья (см. автоматы на деревьях). Рациональное множество обобщает понятие (регулярного/рационального языка) на моноиды, которые не обязательно свободны. Аналогично, понятие распознаваемого языка (конечным автоматом) имеет аналог в виде распознаваемого множества над моноидом, который не обязательно свободен. Говард Штраубинг отмечает в связи с этим, что термин "регулярный язык" несколько неудачен. В работах, испытавших влияние монографии Эйленберга, часто используется термин "распознаваемый язык", относящийся к поведению автоматов, или "рациональный язык", относящийся к важным аналогиям между регулярными выражениями и рациональными степенными рядами. (Фактически, Эйленберг определяет рациональные и распознаваемые подмножества произвольных моноидов; эти два понятия, как правило, не совпадают.) Эта терминология, хотя и более обоснованная, не получила широкого распространения, и "регулярный язык" используется практически повсеместно.

Рациональные ряды – это еще одно обобщение, на этот раз в контексте формального степенного ряда над полукольцом. Этот подход приводит к взвешенным рациональным выражениям и взвешенным автоматам. В этом алгебраическом контексте регулярные языки (соответствующие булевым взвешенным рациональным выражениям) обычно называют рациональными языками. Также в этом контексте теорема Клини находит обобщение, известное как теорема Клине — Шютценбергера.