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

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

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