на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно... |
Формальные языки
Способы задания формальных языков
Прежде всего, для задания формального языка может подойти любое математически корректное определение множества слов в заданном алфавите. Однако если иметь в виду задание, при котором возможно алгоритмическое решение вопроса о принадлежности слова языку, то нужны средства более ограниченные. Наиболее общим из конструктивных способов задания языков является способ, использующий так называемые формальные грамматики.
Формальной грамматикой для порождения формального
языка в алфавите называется набор













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



Классификация Хомского:
- Грамматики типа
— это грамматики, не имеющие ограничений на вид правил.
- Грамматики типа
— это грамматики, в которых правила имеют вид
, где
— нетерминальный символ, а
,
,
— слова в объединенном алфавите. Слова
,
называются контекстом правила. Эти грамматики (и языки, порождаемые ими) называются контекстными, так как в описанном правиле символ
заменяется словом
, если находится в контексте
,
.
- Грамматики типа
— это грамматики, в которых правила имеют вид
, где
— нетерминальный символ, а
— непустое слово в объединенном алфавите. Эти грамматики (и языки, порождаемые ими) называются контекстно-свободными.
- Грамматики типа
— это грамматики, в которых правила имеют вид
, где
— нетерминальный символ, а
может иметь вид либо
, либо
, где
— символ основного алфавита, а
— вспомогательного. Языки, порождаемые грамматиками типа
, называются регулярными.
Известно, что класс языков, задаваемых грамматиками типа ,
является классом рекурсивно перечислимых языков, не совпадающим с классом
рекурсивных языков. На языке теории алгоритмов это означает, что не
существует алгоритма, который по любой грамматике
типа 0 и
любому слову
отвечает на вопрос "
?". С другой
стороны, существует алгоритм, который, получив на входе грамматику
и слово
, ответит "да", если
,
в противном случае он либо ответит "нет", либо будет работать бесконечно.
Классы языков, задаваемых грамматиками типа ,
,
, являются классами рекурсивных языков.
Альтернативный способ задания формальных языков — их описание с помощью различных видов автоматов. Одним из простейших классов языков, имеющих большое прикладное значение, является класс регулярных языков, допускающих описание и с помощью конечных автоматов, и с помощью аналитических выражений.
Регулярные выражения
Регулярные выражения — это аналитический (формульный) способ задания регулярных языков.
Определение.
Регулярным выражением над алфавитом называется выражение,
построенное по следующим правилам:
-
— регулярное выражение;
-
— регулярное выражение;
-
— регулярное выражение, если
;
-
— регулярное выражение, если
и
— регулярные выражения;
-
— регулярное выражение, если
и
— регулярные выражения;
-
— регулярное выражение, если
— регулярное выражение.
Регулярное выражение задает язык
в
соответствии со следующими правилами:
-
— пустой язык;
-
— язык, состоящий из одного пустого слова;
-
— язык, состоящий из одного однобуквенного слова
;
-
;
-
;
-
.
Пример.
Рассмотрим регулярное выражение
над алфавитом
.
Язык
состоит из слов, в которых на нечетных местах стоит
символ
, а на четных
или
.
Замечание 1.
В регулярных выражениях вместо знака " "
часто используют знак "
".
Замечание 2. Если дополнить правила построения регулярных выражений еще двумя правилами
-
— регулярное выражение, если
и
— регулярные выражения,
-
— регулярное выражение, если
— регулярное выражение, и
, а
,
то получим так называемые расширенные регулярные выражения. Здесь
дополнение берется до множества всех слов в алфавите . Если не
использовать дополнение, то получим полурасширенное регулярное выражение.
Как увидим в дальнейшем, использование расширенных регулярных выражений не расширяет класса регулярных языков.
Замечание 3.
Используя описанную выше интерпретацию
регулярных выражений, мы будем вместо соотношения
писать
.