- •Теория алгоритмов Алгоритм и его свойства
- •Формализация понятия «алгоритм»
- •Машины Поста
- •Машины Тьюринга
- •Нормальные алгорифмы Маркова
- •Рекурсивные функции
- •Сложность алгоритма
- •7. Формальные грамматики
- •7.1. Понятие формальной грамматики
- •7.2. Деревья вывода
- •7.3. Классификация языков по Хомскому
- •7.4. Распознающие автоматы
- •7.5. Понятие транслятора
- •7.6. Основные функции компилятора. Лексический анализ
- •7.7. Переход от недетерминированного распознающего автомата к детерминированному
- •7.8. Переход от праволинейной грамматики к автоматной
- •7.10. Детерминированные автоматы с магазинной памятью
7.3. Классификация языков по Хомскому
Н. Хомский предложил подразделять формальные грамматики, как и порождаемые ими языки на четыре типа.
Тип 0 - формальная грамматика, на правила которой не накладывается никаких ограничений. Для исследования они интереса не представляют – поскольку режим «делай, что хочешь» для математики и для практики редко представляют интерес.
Тип 1 . К этому типу относятся грамматики, правила которых имеют вид:
vw ::= vw, где
v, w V* - произвольные цепочки символов, возможно пустые;
VN - нетерминальный символ;
V*\{} [ иногда V* ].
[ V* ].
Эти грамматики еще называют контекстно-зависимыми или КЗ-грамматиками.
Здесь строка заменяется на строку в рамках какого-то контекста. Часто используется на практике подмножество таких грамматик, называемое грамматиками непосредственных составляющих:
vAw ::= vw, где v,w, V* , AVN
При этом часто рассматриваются неукорачивающиеся грамматики (что обеспечивается непустой цепочкой ).
Тип 2 . К этому типу относятся грамматики, правила которых имеют вид:
::=
VN - нетерминальный символ;
V*\{}:
Здесь также представляют наибольший интерес грамматики непосредственных составляющих.
Такие грамматики называются контекстно-свободными грамматиками или КС-грамматиками.
Языки программирования большей частью описываются грамматиками этого типа.
Тип 3 . К этому типу относятся грамматики, правила которых имеют один из двух видов:
A := Bc
A := b
где A, B, C VN ; b,c VT ;
Это так называемый леворекурсивный вариант. В качестве альтернативы возможен и праворекурсивный вариант:
A := сB
A := b
Такие грамматики называют регулярными или автоматными грамматиками. Лексический анализ в компиляторе обычно наиболее целесообразно описывать с помощью этих грамматик.
7.4. Распознающие автоматы
Распознающим называется автомат Мура с множеством выделенных состояний, называемых конечными. Говорят, что автомат распознает входное слово, если, начав свою работу в одном из начальных состояний, он заканчивает ее в одном из конечных.
Пример: Автомат, распознающий слова содержащие попарное вхождение букв а
и b, вроде aabbbbaa. f1, f2 - конечные состояния
2 a
a
b f1
a,b a a
4 1
b
a b
b f2
3
b
.
Распознающий автомат – это, как правило, недетерминированный частичный автомат. То есть по одному и тому же сигналу можно перейти в различные состояния, а в некоторых состояниях нет перехода для ряда входных сигналов.
B
a,b b
A b F
a a
C
|
0 |
0 |
0 |
1 |
|
A |
B |
C |
F |
a |
B,C |
|
F |
|
b |
B |
С,F |
|
|
Кстати, строка, приписывающая состояниям выходные сигналы совсем не обязательна.
Представление этого автомата с помощью автоматной грамматики:
A aB | bB | aC
B bC | b
C a
Это праворекурсивная автоматная грамматика.