В теории формальных языков выделяются 4 типа грамматик, которым соответствуют 4 типа языков. Эти грамматики выделяются путем наложения усиливающихся ограничений на правила грамматики
Грамматики типа 0
Грамматики типа 0, которые называют грамматиками общего вида, не имеют никаких ограничений на правила порождения. Эти грамматики порождают естественные языки.
Любое правило
r = η

ψ
может быть построено с использованием произвольных цепочек η , ψ

(V
т 
V
А)*. Например,
<T><W>

<W><T> или x<A>b<C><D>

x<H><D>
Грамматики типа 1
Грамматики типа 1, которые называют также контекстно-зависимыми грамматиками, не допускают использования любых правил. Правила вывода в таких грамматиках должны иметь вид:
χ
1<A>χ
2 
χ
1 ω χ
2,
где χ
1, χ
2 - цепочки, возможно пустые, из множества (V
т 
V
А)*, символ <А>

V
А и цепочка ω

(V
т 
V
А)*. Цепочки χ
1 и χ
2 остаются неизменными при применении правила, поэтому их называют контекстом (соответственно левым и правым), а грамматику - контекстно-зависимой.
Грамматики типа 1 значительно удобнее на практике, чем грамматики типа 0, поскольку в левой части правила заменяется всегда один нетерминальный символ, который можно связать с некоторым синтаксическим понятием, в то время как в грамматике типа 0 можно заменять сразу несколько символов, в том числе и терминальных.
Например, грамматика:
Г1. 4:
Vт = {a, b, c, d}, VА = {<I>, <A>, <B>}
R = { <I>

aA<I>,
A<I>

AA<I>,
AAA

A<B>A,
A

b,
b<B>A

bcdA,
b<I>

ba }
является контекстно-зависимой, поскольку второе и шестое правила имеют непустой левый контекст, а третье и пятое правила содержат оба контекста. Вывод в такой грамматике может иметь вид:
<I>

a<A><I>

a<A><A><I>

ab<A><I>

abb<I>

abba
Грамматики типа 2
Грамматики типа 2 называют контектно-свободными и бесконтекстными грамматиками (КС-грамматики или Б-грамматики).
Правила вывода таких грамматик имеют вид:
<A>

α,
Очевидно, что эти правила получаются из правил грамматики типа 1 при условии χ1 = χ2 = $. Поскольку контекстные условия отсутствуют, то правила КС-грамматик получаются проще, чем правила грамматик типа 1. Именно такие грамматики используются для описания языков программирования.
Примером КС-грамматики может служить следующая:
Г1. 5:
Vт = {a, b}, VА = {<I>},
R = { <I>

a<I>a
,
<I>

b<I>b,
<I>

aa
,
<I>

bb}
Эта грамматика порождает язык, который состоит из цепочек, каждая из которых в свою очередь состоит из двух частей, цепочки β

V
т* и зеркального отображения этой цепочки β'.
L( Г
5 ) = { bb' | b

V
т+},
где Vт+ - это множество Vт* без пустой цепочки. С помощью правил этой грамматики может быть построена, например, следующая цепочка:
<I>

a<I>a

ab<I>ba

aba<I>aba

ababbaba
Грамматики типа 3
Грамматики типа 3 называют автоматными грамматиками (А - грамматиками). Правила вывода в таких грамматиках имеют вид:
<A>

a или <A>

a<B> или <A>

<B>a,
где a

V
т, <A>, <B>

V
А, причем грамматика может иметь только правила вида <A>

a<B> - правосторонние правила, либо только вида <A>

<B>a - левосторонние правила. Примерами автоматных грамматик могут служить правосторонняя грамматика Г
1. 6 и левосторонняя грамматика Г
1. 7.
Г1. 6
Vт = {a, b}, VА = {<I>, <A>},
R = { <I>

a<I>
,
<I>

a<A>,
<A>

b<A>,
<A>

b<Z>,
<Z>

$ }
Г1. 7
Vт = {a, b}, VА = {<I>, <A>},
R = { <I>

<A>b,
<A>

<A>b,
<A>

<Z>a,
<Z>

<Z>a,
<Z>

$ }
Эти грамматики являются эквивалентными и порождают язык
L(Г7) = {a...ab...b | n,m > 0}
Между множествами языков различных типов существует отношение включения:
{ L
типа 3 }

{ L
типа 2 }

{ L
типа 1 }

{ L
типа 0 }
Доказано, что существуют языки типа 0, не являющиеся языками типа 1, языки типа 2, не являющиеся языками типа 1, и языки типа 3, не являющиея языками типа 2.
Учитывая, что наибольшее практическое применение находят грамматики типа 2 и типа 3, дальнейшее изложение посвящается рассмотрению именно этих типов грамматик.