Опубликован: 26.09.2006 | Уровень: специалист | Доступ: платный
Лекция 13:

Формальные языки

Способы задания формальных языков

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

Формальной грамматикой для порождения формального языка в алфавите A называется набор

\eq*{
G = (A, B, S, P),
}
где Aалфавит терминальных (основных) символов; Bалфавит нетерминальных (вспомогательных) символов, A \cap B = \varnothing ; S — стартовый символ, S \in B ; P — конечный набор правил вывода. Каждое правило вывода имеет вид \varphi \to \psi, где \varphi, \psi — слова в объединенном алфавите A \cup B, причем \varphi содержит хотя бы один символ из алфавита B.

Правило \varphi \to \psi применимо к слову u, если \varphi является фрагментом слова u. Результатом применения этого правила к слову u называется слово v, полученное заменой любого фрагмента \varphi в слове u на слово u \Rightarrow v.

Если v — результат применения некоторого правила к слову u, то пишем u \Rightarrow v.

Если u \Rightarrow  v_1 \Rightarrow  v_2 \Rightarrow   \ldots
\Rightarrow
v_n \Rightarrow  v, то пишем u \Rightarrow  \Rightarrow  v.

Язык L(G), порождаемый грамматикой G, определяется следующим образом:

\eq*{
L(G) = \{v\, |\, v \in A^\ast,\ S \Rightarrow\Rightarrow v\}.
}
Другими словами, L(G) — множество слов в основном алфавите, которые могут быть получены из стартового символа S путем конечного числа применений правил грамматики.

Классификация Хомского:

  • Грамматики типа 0 — это грамматики, не имеющие ограничений на вид правил.
  • Грамматики типа 1 — это грамматики, в которых правила имеют вид \varphi_1 X \varphi_2 \to \varphi_1 v \varphi_2, где X — нетерминальный символ, а \varphi_1, \varphi_2, v — слова в объединенном алфавите. Слова \varphi_1, \varphi_2 называются контекстом правила. Эти грамматики (и языки, порождаемые ими) называются контекстными, так как в описанном правиле символ X заменяется словом v, если находится в контексте \varphi_1, \varphi_2.
  • Грамматики типа 2 — это грамматики, в которых правила имеют вид X \to v, где X — нетерминальный символ, а v — непустое слово в объединенном алфавите. Эти грамматики (и языки, порождаемые ими) называются контекстно-свободными.
  • Грамматики типа 3 — это грамматики, в которых правила имеют вид X \to v, где X — нетерминальный символ, а v может иметь вид либо a, либо aY, где a — символ основного алфавита, а Y — вспомогательного. Языки, порождаемые грамматиками типа 3, называются регулярными.

Известно, что класс языков, задаваемых грамматиками типа 0, является классом рекурсивно перечислимых языков, не совпадающим с классом рекурсивных языков. На языке теории алгоритмов это означает, что не существует алгоритма, который по любой грамматике G типа 0 и любому слову u отвечает на вопрос " u \in
L(G)?". С другой стороны, существует алгоритм, который, получив на входе грамматику G и слово u, ответит "да", если u \in L(G), в противном случае он либо ответит "нет", либо будет работать бесконечно.

Классы языков, задаваемых грамматиками типа 1, 2, 3, являются классами рекурсивных языков.

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

Регулярные выражения

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

Определение. Регулярным выражением над алфавитом A называется выражение, построенное по следующим правилам:

  • \varnothing — регулярное выражение;
  • \lm — регулярное выражение;
  • a — регулярное выражение, если a \in A ;
  • (P \vee S) — регулярное выражение, если P и S — регулярные выражения;
  • (P\cdot S) — регулярное выражение, если P и S — регулярные выражения;
  • P^\ast — регулярное выражение, если P — регулярное выражение.

Регулярное выражение R задает язык L(R) в соответствии со следующими правилами:

  • L(\varnothing) — пустой язык;
  • L(\lm) — язык, состоящий из одного пустого слова;
  • L(a) — язык, состоящий из одного однобуквенного слова a ;
  • L((P \vee S)) = L(P) \cup L(S) ;
  • L((P\cdot S)) = L(P)L(S) ;
  • L(P^\ast) = (L(P))^\ast.

Пример. Рассмотрим регулярное выражение R = (ab \vee ac)^\ast (a \vee \lm) над алфавитом A = \{a, b, c\}. Язык L(R) состоит из слов, в которых на нечетных местах стоит символ a, а на четных b или c.

Замечание 1. В регулярных выражениях вместо знака " \vee " часто используют знак " + ".

Замечание 2. Если дополнить правила построения регулярных выражений еще двумя правилами

  1. (P \cap S) — регулярное выражение, если P и S — регулярные выражения,
  2. \overline{P} — регулярное выражение, если P — регулярное выражение, и L((P\cap S)) = L(P)\cap L(S), а L(\overline{P})=
\overline{L(P)},

то получим так называемые расширенные регулярные выражения. Здесь дополнение берется до множества всех слов в алфавите A. Если не использовать дополнение, то получим полурасширенное регулярное выражение.

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

Замечание 3. Используя описанную выше интерпретацию регулярных выражений, мы будем вместо соотношения u \in L(R) писать u \in R.

Антон Сиротинкин
Антон Сиротинкин

на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно...
 

Дмитрий Степаненко
Дмитрий Степаненко
Россия
Эдуард Санин
Эдуард Санин
Украина, Харьков, ХАИ