Gm2irk - Образовательный портал
  • Главная
  • Рассылка
  • Регулярный язык. Конечные автоматы и регулярные языки Начальные понятия теории формальных языков

Регулярный язык. Конечные автоматы и регулярные языки Начальные понятия теории формальных языков

Регулярный язык

В теории языков регуля́рным мно́жеством (или, регуля́рным языком ) называется формальный язык , который удовлетворяет приведённым ниже свойствам. Эти простые свойства таковы, что класс регулярных множеств удобно изучать в целом и полученные результаты оказываются применимы во многих важных случаях формальных языков. То есть, понятие регулярного множества является примером математической структуры .

Определение регулярного множества

Пусть Σ - конечный алфавит. Регулярное множество R(Σ) в алфавите Σ определяется следующими рекурсивными свойствами:

№. Свойство Описание
1 Пустое множество является регулярным множеством в алфавите Σ
2 Множество, состоящее из одной лишь пустой строки является регулярным множеством в алфавите Σ
3 Множество, состоящее из одного любого символа алфавита Σ является регулярным множеством в алфавите Σ
4 Если два какие-либо множества являются регулярными в алфавите Σ, то и их объединение тоже является регулярным множеством в алфавите Σ
5 Если два какие-либо множества являются регулярными в алфавите Σ, то и множество, составленное из всевозможных сцеплений пар их элементов тоже является регулярным множеством в алфавите Σ
6 Если какое-либо множество является регулярным в алфавите Σ, то множество всевозможных сцеплений его элементов тоже является регулярным множеством в алфавите Σ
Ничто другое, кроме следующего из перечисленного, не является регулярным множеством в алфавите Σ

См. также

  • Построение синтаксического анализатора на основе автоматного подхода

Wikimedia Foundation . 2010 .

Смотреть что такое "Регулярный язык" в других словарях:

    регулярный язык - — Тематики электросвязь, основные понятия EN regular language … Справочник технического переводчика

    - (лат. regularius, от regula правило). Правильный, правильно устроенный, сделанный. Регулярный ход машины. Равномерный ход. Регулярная жизнь. Правильная, порядочная, однообразная жизнь. Словарь иностранных слов, вошедших в состав русского языка.… … Словарь иностранных слов русского языка

    См … Словарь синонимов

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

    У этого термина существуют и другие значения, см. Кечуа. Кечуа Самоназвание: Qhichwa Simi, Runa Simi Страны … Википедия

    Каркас здания с сеткой колонг или стоек, основанной на шаге одного размера (Болгарский язык; Български) равномерен скелет (Чешский язык; Čeština) pravidelný skelet (Немецкий язык; Deutsch) regelmäßiges Skelett (Венгерский язык; Magyar) szabályos… … Строительный словарь

    - [ПАРК ФРАНЦУЗСКИЙ] парк, имеющий геометрически правильную планировку, обычно осевую схему (Болгарский язык; Български) френски парк (Чешский язык; Čeština) francouzský park (Немецкий язык; Deutsch) regelmäßiger Park; französischer Park… … Строительный словарь

    Кечуа Самоназвание: Qhichwa Simi, Runa Simi Страны: Аргентина, Боливия, Колумбия, Перу, Чили, Эквадор Регионы: Анды Официальный статус: Перу … Википедия

    Тагальский язык - (тагал, тагала, тагало; тагалог) один из филиппинских языков. Ареал первоначального распространения приходится на самый важный в политическом, экономическом и культурном отношении регион Республики Филиппины центральные и южные части острова… … Лингвистический энциклопедический словарь

Книги

  • Производные глаголы. Секреты финской грамматики. Учебное пособие , Сафронов В. Д.. Пособие посвящено одному из интереснейших и недостаточно изложенных в русскоязычной учебной литературе разделов финской грамматики - производным глаголам. Они образуются от глаголов и от имен…

В этой главе мы начинаем изложение элементов теории формальных языков.

Говоря "формальный язык", мы имеем в виду то, что приведенные здесь результаты используются прежде всего при описании искусственных языков, придуманных людьми для специальных целей, например языков программирования. Но непреодолимой преграды между специально придуманными искусственными (формальными) языками и стихийно возникающими и развивающимися естественными языками не существует. Оказывается, что естественные языки характеризуются сложными грамматическими правилами, т.е. довольно жестко формализованы, а даже самый "научно разработанный" язык программирования содержит "темные места", однозначное понимание которых является проблемой.

Изучая языки, следует иметь в виду три основных аспекта.

Первый из них - синтаксис языка . Язык - это какое- то множество "слов", где "слово" есть определенная конечная последовательность "букв" - символов какого-то заранее фиксированного алфавита. Термины "буква" и "слово" могут пониматься по-разному (математическое определение этих терминов будет дано ниже). Так, "буквами" могут быть действительно буквы алфавита какого-нибудь естественного или формального языка, например русского языка или языка программирования "Паскаль". Тогда "словами" будут конечные последовательности "букв": крокодил", "integer ". Такие слова называют "лексемами". Но "буквой" может быть "слово" ("лексема") в целом. Тогда "слова" - это предложения естественного языка или программы языка программирования. Если фиксировано какое-то множество "букв", то не каждая их последовательность будет "словом", т.е. Элексемой" данного языка, а только такая последовательность, которая подчиняется определенным правилам. Слово "крыкадил" не является лексемой русского языка, а слово "iff" не является лексемой в "Паскале". Предложение "Я люблю ты" не является правильным предложением русского языка, точно так же, как и запись "х:= =t" не есть правильно написанный оператор присваивания "Паскаля". Синтаксис* языка и представляет собой систему правил, в соответствии с которыми можно строить "правильные" последовательности "букв". Каждое слово языка характеризуется определенной структурой, специфичной именно для данного языка. Тог да необходимо, с одной стороны, разработать механизмы перечисления, или порождения, слов с заданной структурой, а с другой - механизмы проверки того, что данное слово принадлежит данному языку. Прежде всего именно:эти механизмы и изучает классическая теория формальных языков.

Второй аспект - семантика языка . Семантика** предполагает сопоставление словам языка некоего "смысла", Эзначения". Например, записывая математическую формулу, мы должны соблюдать определенные синтаксические правила (расстановка скобок, правописание символов, порядок символов и т.п.), но, кроме этого, формула имеет вполне определенный смысл, что-то обозначает.

Язык - это средство общения, передачи информации. Если мы хотим, чтобы нас поняли, мы должны не только синтаксически правильно, соблюдая должный порядок букв в слове и слов в предложении, строить свою речь, но и заботиться об ее смысле, о тех идеях, которые мы выражаем в речи. Математические теории "смысла" появились сравнительно недавно, и в дополнении к следующей главе мы очень коротко рассмотрим некоторые подходы к математическому описанию семантики языков программирования.

* Слово "синтаксис" происходит от древнегреческих "syn" - "вместе" и "taxis" - "порядок, строй". Таким образом, синтаксис можно понимать как "составление".

** От древнегреческих слов "sema" - "знак, знамение" и "semanticos" - "обозначающий".

Наконец, третий аспект - прагматика языка . Прагматика связана с теми целями, которые ставит перед собой носитель языка: например, человек произносит речь, имея перед собой цели, связанные не с синтаксисом, не с семантикой языка, на котором он говорит или пишет, а, скажем, с получением за речь определенной суммы денег. Прагматика является уже скорее дисциплиной социально-философской, затрагивающей целепол агающую деятельность личности. Мы ни в малейшей степени не будем ее касаться.

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

  • Алфавит, слово, язык

  • Порождающие грамматики

    Как уже отмечалось, классическая теория формальных языков изучает прежде всего синтаксис языка. Она вводит математическую модель синтаксиса, которая описывает механизмы порождения и распознавания "правильно построенных" цепочек. В этом разделе мы рассмотрим первый из этих механизмов.

Регулярные грамматики, конечные автоматы и регулярные множества (и обозначающие их регулярные выражения) представляют собой три различных способа задания регулярных языков.

Утверждение

Язык является РМ тогда и только тогда, когда он задан леволинейной (праволинейной) грамматикой. Язык может быть задан леволинейной (праволинейной) грамматикой тогда и только тогда, когда он является регулярным множеством.

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

Все эти три способа эквивалентны. Существуют алгоритмы, позволяющие для языка, заданного одним из указанных способов, построить другой способ, определяющий тот же самый язык. Подробное описание этих алгоритмов есть в литературе (см. список).

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

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

Для построения КА на основе известной регулярной грамматики ее необходимо привести к автоматному виду. Множество состояний автомата будет соответствовать множеству нетерминальных символов грамматики. 2.3.2 Свойства регулярных языков

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

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

Для регулярных языков разрешимы многие проблемы, неразрешимые для других типов языков. Например, следующие проблемы являются разрешимыми независимо от того, каким из способов задан язык:

Проблема эквивалентности: Даны два регулярных языка L 1 (V) и L 2 (V). Необходимо установить, являются ли они эквивалентными.

Проблема принадлежности цепочки языку. Дан регулярный язык L(V), цепочка символов V * . Требуется проверить, принадлежит ли эта цепочка языку.

Проблема пустоты языка. Дан регулярный язык L(V). Необходимо проверить, является ли этот язык пустым, т.е. найти хотя бы одну цепочку, L(V).

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

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

Формально лемма записывается так. Если дан язык L, то константа p>0, такая, что если L и p, то цепочку можно записать в виде, где 0

Пример. Рассмотрим язык L={a n b n n>0}. Докажем, что он не является регулярным, используя для этого лемму о разрастании языков.

Пусть этот язык регулярный, тогда для него должна выполняться лемма о разрастании. Возьмем некоторую цепочку этого языка = a n b n и запишем ее в виде. Если a + или b + , то тогда цепочка i не принадлежит языку для любого i, что противоречит условиям леммы. Если же a + b + , то цепочка 2 также не принадлежит языку L. Получили противоречие, следовательно, язык не является регулярным.

операции объединения языков мы знаем. Определим операции конкатенации и итерации (иногда ее называют замыканием Клини).

Пусть L 1 и L 2 - языки в алфавите

Тогда , т.е. конкатенация языков состоит из конкатенаций всех слов первого языка со всеми словами второго языка. В частности, если , то , а если , то .

Введем обозначения для "степеней" языка L :

Таким образом в L i входят все слова, которые можно разбить на i подряд идущих слов из L .

Итерацию (L) * языка L образуют все слова которые можно разбить на несколько подряд идущих слов из L :

Ее можно представить с помощью степеней:

Часто удобно рассматривать "усеченную" итерацию языка, которая не содержит пустое слово , если его нет в языке: . Это не новая операция, а просто удобное сокращение для выражения .

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

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

Выражение r Язык L r
L a ={a}
Пусть r 1 и r 2 -это L r1 и L r2 -представляемые
регулярные выражения . ими языки.
Тогда следующие выражения
являются регулярными и представляют языки:
r=(r 1 +r 2)
r=(r 1 circr 2)
r=(r 1) * L r =L r1 *

При записи регулярных выражений будем опускать знак конкатенации и будем считать, что операция * имеет больший приоритет, чем конкатенация и + , а конкатенация - больший приоритет, чем + . Это позволит опустить многие скобки. Например, можно записать как 10(1 * + 0) .

Определение 5.1 . Два регулярных выражения r и p называются эквивалентными, если совпадают представляемые ими языки, т.е. L r =L p . В этом случае пишем r = p .

Нетрудно проверить, например, такие свойства регулярных операций:

  • r + p= p+ r (коммутативность объединения),
  • (r+p) +q = r + (p+q) (ассоциативность объединения),
  • (r p) q = r (p q) (ассоциативность конкатенации),
  • (r *) * = r * (идемпотентность итерации ),
  • (r +p) q = rq + pq (дистрибутивность).

Пример 5.1 . Докажем в качестве примера не столь очевидное равенство : (r + p) * = (r * p *) * .

Пусть L 1 - язык, представляемый его левой частью, а L 2 - правой. Пустое слово принадлежит обоим языкам. Если непустое слово , то по определению итерации оно представимо как конкатенация подслов, принадлежащих языку . Но этот язык является подмножеством языка L"=L r * L p * (почему?). Поэтому . Обратно, если слово , то оно представимо как конкатенация подслов, принадлежащих языку L" . Каждое из таких подслов v представимо в виде v= v 1 1 ... v k 1 v 1 2 ... v l 2 , где для всех i=1, ... , k подслово и для всех j=1, ... , l подслово (возможно, что k или l равно 0). Но это значит, что w является конкатенацией подслов, каждое из которых принадлежит и, следовательно, .

Лабораторная работа №3

Разработка лексического анализатора выполняется достаточно просто, если используется теория регулярных языков и конечных автоматов. Рамках этой теории классы однотипных лексем рассматриваются как формальные языки (язык идентификаторов, язык констант и т.д.), множество предложений которых описывается с помощью соответствующей порождающей грамматики. При этом языки эти настолько просты, что они порождаются простейшей из грамматик – регулярной грамматикой.

Определение 1 . порождающая грамматика G = , правила которой имеют вид: А::=аВ или С::=b, где А, В,С Є N; a, b Є Т называется регулярной (автоматной).

Язык L (G), порождаемый автоматной грамматикой, называется автоматным (регулярным) языком или языком с конечным числом состояний.

Пример 1 . Класс идентификаторов, если идентификатором является последовательность, состоящая из букв и цифр, и первым символом идентификатора может быть только буква, описывается следующей порождающей регулярной грамматикой G = , в которой

N= {I, K}, T = {б, ц}, S={I},

P = { 1. I::= б

Здесь б, ц – обобщенные терминальные символы для обозначения букв и цифр соответственно.

Процесс порождения идентификатора «ббцбц» описывается следующей последовательностью подстановок

I => бК => ббК => ббцК => ббцбК => ббцбц

Однако основной задачей ЛА является не порождение лексических единиц, а их распознавание. Математической моделью процесса распознавания регулярного языка является вычислительное устройство, которое называется конечным автоматом (КА). Термин «конечный» подчеркивает то, что вычислительное устройство имеет фиксированный и конечный объем памяти и обрабатывает последовательность входных символов, принадлежащих некоторому конечному множеству. Существуют различные типы КА, если функцией выхода КА (результатом работы) является лишь указание на то, допустима или нет входная последовательность символов, такой КА называют конечным распознавателем.

Определение 2. Конечным автоматом называется следующая пятерка:

А = , где V = {a 1 , a 2 , …, a m } – входной алфавит (конечное множество символов);

Q = {q 0 , q 1 , …, q n -1 } – алфавит состояний (конечное множество символов);

δ: Q ×V →Q – функция переходов;

q 0 Є Q – начальное состояние конечного автомата;

F Є Q – множество заключительных состояний.

Схема функционирования КА.

Имеется бесконечная лента, разбитая на ячейки, в каждой из которых может находиться один символ из V. На ленте записана цепочка α Є V*. Ячейки слева и справа от цепочки не заполнены. Имеется конечное устройство управления (УУ) с читающей головкой, которое может последовательно считывать символы с ленты, передвигаясь вдоль ленты слева направо. При этом, УУ может находиться в каком – либо одном состоянии из Q. Начинает свою работу УУ всегда в начальном состоянии q 0 , а завершает в одном из заключительных состояний F. Каждый раз, переходя к новой ячейке на ленте, УУ переходит в новое состояние в соответствии с функцией δ.


Функцию переходов КА можно представить следующими способами:

· Совокупность команд;

· Диаграмма состояний;

· Таблица переходов.

Команда конечного автомата записывается следующим образом:

(q i , a j) → q k , где q i , q k Є Q; a j Є V.

Данная команда обозначает, что конечный автомат находится в состоянии q i , читает с ленты символ а j и переходит в состояние q k .

Графически команда представляется в виде дуги графа, идущей из вершины q i в вершину q k и помеченной символом a j входного алфавита:

Графическое представление всего отображения δ называют диаграммой состояний конечного автомата.

Если КА оказывается в ситуации (q i , a j), которая не является левой частью какой – либо команды, то он останавливается. Если же УУ считает все символы цепочки α, записанной на ленте, и при этом перейдет в заключительное состояние q r Є F, то говорят, что цепочка α допускается конечным автоматом.

Таблица переходов КА строится следующим образом: столбцы матрицы соответствуют символам из входного алфавита, строки – символам из алфавита состояний, а элементы матрицы соответствуют состояниям, в которые переходит КА для данной комбинации входного символа и символа состояния.

Пусть задана регулярная грамматика G = , правила которой имеют вид: А i::= a j A k или А i::= a j , где А i , A k Є N и a j Є Т.

Тогда конечный автомат А = , допускающий тот же самый язык, что порождает регулярная грамматика G, строится следующим образом:

2) Q = N U {Z}, Z N и Z T, Z – заключительное состояние КА;

5) Отображение δ строится в виде:

· Каждому правилу подстановки в грамматике G вида А i::= a j A k ставится в соответствие команда (А i , a j) → A k ;

· Каждому правилу подстановки вида А i::= a j ставится в соответствие команда (А i , a j) → Z;

Пример 2. Построить КА для грамматики из примера 1. Имеем А = , где

1) V = T = {б, ц}

2) Q = N U {Z} = {I, R, Z}

3) q 0 = {S} = {I}

5) δ: a) в виде совокупности команд:

б) в виде диаграммы состояний

Различают детерминированные и недетерминированные конечные автоматы. КА называется недетерминированным КА (НКА), если в диаграмме его состояний из одной вершины исходит несколько дуг с одинаковыми пометками. Например, КА из примера 2 является НКА.

Для практических целей необходимо, чтобы конечный распознаватель сам определял момент окончания входной последовательности символов с выдачей сообщения о правильности или ошибочности входной цепочки. Для этих целей входная цепочка считается ограниченной справа концевым маркером ├ и в диаграмму состояний КА вводятся интерпретированные состояния:

Z – «допустить входную цепочку»;

О – «запомнена ошибка во входной цепочке»;

Е – «отвергнуть входную цепочку».

Состояния Z и Е являются заключительными, и в них КА переходит при прочтении концевого маркера ├ соответственно после обработки правильной или ошибочной входной цепочки. Состояние О является промежуточным, в него КА переходит из любого допустимого состояния КА при обнаружении ошибки во входной цепочке и остается в нем до поступления концевого маркера ├, после чего осуществляется переход в состояние Е – «отвергнуть входную цепочку».

Лучшие статьи по теме