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

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

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

Соседние файлы в папке много всякого