Классификация грамматик
Классификация грамматик по Хомскому. Контекстно-зависимые и контекстно-свободные грамматики. Неукорачивающие
грамматики. Регулярные грамматики и языки. Праволинейные и леволинейные грамматики. Автоматные грамматики.
Классификация языков. Классификация распознавателей. Машина Тьюринга.
Классификация грамматик по Хомскому.
Американский лингвист Ноам Хомски предложил классифицировать грамматики по структуре их правил. Если все
без исключения правила грамматики удовлетворяют некоторой заданной структуре, то грамматика принадлежит заданному
типу. По классификации Хомского грамматики делятся на 4 типа:
Тип 0. Грамматики с фразовой структурой. На структуру правил не накладывается никаких ограничений: Для
грамматики вида G(T,N,P,S), V=N∪T правила имеют вид: α→β, α∈V
+
, β∈V
*
. Это самый общий тип грамматик. Все фор-
мальные грамматики принадлежат этому классу. Грамматики, которые относятся к типу 0, и не могут быть отнесены к дру-
гим типам, имеют самую сложную структуру. Практического применения этот класс грамматик не имеет.
Тип 1. Контекстно-зависимые (КЗ) грамматики. Для грамматики вида G(T,N,P,S), V=N∪T правила имеют вид:
α
1
Аα
2
→α
1
βα
2
, α
1
, α
2
∈V
*
, А∈N, β∈V
+
. Структура этих грамматик такова, что один и тот же нетерминальный символ может
быть заменен на ту или иную цепочку символов в зависимости от контекста, в котором он встречается. Цепочки α
1
, α
2
обо-
значают контекст, они могут быть пустой цепочкой в общем случае.
Разновидность грамматик этого класса – неукорачивающие грамматики. Для грамматики вида G(T,N,P,S), V=N∪T
правила имеют вид: α→β, α, β∈V
+
, |β|≥|α|. Любая цепочка символов в этом случае заменяется на цепочку не меньшей длины.
Доказано, что эти два класса грамматик эквивалентны. Для любого языка, заданного КЗ грамматикой можно постро-
ить неукорачивающую грамматику, задающую эквивалентный язык, и наоборот. При построении компиляторов эти грамма-
тики не применяются, поскольку синтаксические конструкции ЯП имеют более простую структуру и могут быть построены
с помощью грамматик других типов.
Тип 2. Контекстно-свободные (КС) грамматики. Для грамматики вида G(T,N,P,S), V=N∪T правила имеют вид:
А→β, А∈N, β∈V
+
. КС грамматики имеют в правой части как минимум один символ. Они являются неукорачивающими.
Фактически получаются из условий грамматик класса 1, у которых α
1
=α
2
=λ∈V
*
, т.е. отсутствует контекст.
Почти эквивалентный им класс – укорачивающие КС грамматики. Для грамматики вида G(T,N,P,S), V=N∪T пра-
вила имеют вид: А→β, А∈N, β∈V
*
.
Внутри класса КС грамматик выделяют множество различных классов. Синтаксис большинства ЯП основан на КС
грамматиках. Их используют для построения синтаксического анализатора компиляторов.
Тип 3. Регулярные (автоматные) грамматики. К ним относятся два эквивалентных класса грамматик: леволиней-
ные и праволинейные. Леволинейные грамматики G(T,N,P,S), V=N∪T правила имеют вид: А→Вγ, А→γ, А,В∈N, γ∈Т
*
. Т.е.
при выводе нетерминальный символ если и остается, то слева. Праволинейные грамматики G(T,N,P,S), V=N∪T правила
имеют вид: А→γВ, А→γ, А,В∈N, γ∈Т
*
. Леволинейные и праволинейные грамматики эквивалентны. Для любого языка, за-
данного леволинейной грамматикой, может быть построена праволинейная, определяющая эквивалентный язык, и наоборот.
Чаще используются леволинейные грамматики, поскольку их построение отвечает порядку построения предложений ЯП.
Используются при описании простейших конструкций ЯП: идентификаторов, констант, строк, комментариев и т.д. На их
основе строятся лексические анализаторы компиляторов.
Среди регулярных грамматик выделяется класс автоматных грамматик, которые так же могут быть праволиней-
ными и леволинейными: Леволинейные: G(T,N,P,S), V=N∪T правила имеют вид: А→Вt, А→t, А,В∈N, t∈Т, праволинейные:
G(T,N,P,S), V=N∪T правила имеют вид: А→tВ, А→t, А,В∈N, t∈Т. Основное отличие в том, что где в правилах регулярных
грамматик может присутствовать цепочка символов, в автоматных может присутствовать только один терминальный сим-
вол. Классы терминальных и автоматных грамматик почти эквивалентны. В автоматных грамматиках допускается дополни-
тельное правило вида S→λ, где S - аксиома. При этом S не должен встречаться в правых частях других правил грамматики.
В этом случае язык, заданный автоматной грамматикой, может включать в себя пустую цепочку, и такая автоматная грамма-
тика полностью эквивалентна регулярной.
В общем случае одна и та же грамматика может быть отнесена к нескольким классам. Для классификации всегда
выбирается тип с максимальным номером. Сложность грамматики обратно пропорциональна их типу. Класс 0 допускает
самые сложные грамматики, класс 3 – самые простые.
Классификация языков.
Языки классифицируются в соответствии с типом грамматики, с помощью которых они задаются. Поскольку один и
тот же язык может быть задан с помощью большого количества грамматик, относящихся к разным типам, то из всех этих
грамматик берется та, которая имеет максимальный номер класса. Например, если язык L задается грамматиками G1 (класс
1) и G2 (класс 2), то он относится к типу 2.
Тип 0. Языки с фразовой структурой. Самые сложные языки, задаваемые грамматиками типа 0. К этому типу от-
носятся все естественные языки. Структура и значение фразы ЕЯ зависит не только от контекста данной фразы, но и от со-
держания текста, где встречается эта фраза. Слово может иметь разное значение, может играть разные роли в предложении.
Поэтому и проблематично построить соответствующий компилятор (в т.ч. переводчик на другой язык).
Тип 1. Контекстно-зависимые языки (КЗ). Языки и грамматики этого типа используются при анализе и переводе
текстов на естественных языках. В компиляторах КЗ-языки не используются.
Тип 2. Контекстно-свободные языки (КС). Эти языки лежат в основе большинства современных ЯП.
Тип 3. Регулярные языки. Самый простой тип языков. Эти языки лежат в основе простейших конструкций ЯП
(идентификаторы, константы), на их основе строятся многие мнемокоды машинных команд (ассемблеры) и т.д.