Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
68
Добавлен:
16.04.2013
Размер:
977 Кб
Скачать

7.2. Деревья вывода

Порождение и свертывание можно также представлять с помощью деревьев вывода.

Пусть дана грамматика.

I  T

I  I + T

I I - T

T  M

T  T*M

T  T/M

M  (I)

M  K

K  a

K  b

K  c

Построим дерево вывода.

Для предложения a * b + c дерево вывода будет:

I

I T

T M

T * M K

M K c

a b

Этот же результат можно получить и другим способом:

I  I + I

I  I - I I

I  I*I

I  I/I I + I

I  (I)

I  a I * I c I  b

I  c a b

7.3. Классификация языков по Хомскому

Н. Хомский предложил подразделять формальные грамматики, как и порождаемые ими языки на четыре типа.

Тип 0 - формальная грамматика, на правила которой не накладывается никаких ограничений. Для исследования они интереса не представляют – поскольку режим «делай, что хочешь» для математики и для практики редко представляют интерес.

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

vw ::= vw, где

v, w  V* - произвольные цепочки символов, возможно пустые;

  VN - нетерминальный символ;

  V*\{} [ иногда   V* ].

[   V* ].

Эти грамматики еще называют контекстно-зависимыми или КЗ-грамматиками.

Здесь строка  заменяется на строку  в рамках какого-то контекста. Часто используется на практике подмножество таких грамматик, называемое грамматиками непосредственных составляющих:

vAw ::= vw, где v,w, V* , AVN

При этом часто рассматриваются неукорачивающиеся грамматики (что обеспечивается непустой цепочкой ).

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

 ::= 

  VN - нетерминальный символ;

  V*\{}:

Здесь также представляют наибольший интерес грамматики непосредственных составляющих.

Такие грамматики называются контекстно-свободными грамматиками или КС-грамматиками.

Языки программирования большей частью описываются грамматиками этого типа.

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

 A := Bc

 A := b 

где A, B, C VN ; b,c  VT ;

Это так называемый леворекурсивный вариант. В качестве альтернативы возможен и праворекурсивный вариант:

 A := сB

 A := b 

Такие грамматики называют регулярными или автоматными грамматиками. Лексический анализ в компиляторе обычно наиболее целесообразно описывать с помощью этих грамматик.