Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Соловьев Е.А. Учебник по дискретной математике.doc
Скачиваний:
144
Добавлен:
02.05.2014
Размер:
961.54 Кб
Скачать

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 

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

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

Это праворекурсивная автоматная грамматика.