Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИТ лекции.docx
Скачиваний:
10
Добавлен:
24.11.2019
Размер:
688.23 Кб
Скачать

3.5.3. Конечные преобразователи. (Простейший транслятор)

В его основе лежит конечный автомат.

Конечный преобразователь:

M= {Q, S, D, d0, q0, F},

где Q – множество состояний;

S - входной алфавит;

D - выходной алфавит;

d0 – функция отображения;

q0 – начальное состояние;

F – множество заключительных состояний.

Q * Sие -> Q*D*.

Конфигурация определяется: (q, x, y).

Если d(q0, a)= d(q1, b), то (q0, ax, y)|- (q1, x, yb).

Цепочка y называется выходом цепочки x, если имеет место следующее:

+

(q0, x, y)|--- (q1, x, y), где x Î S*, y Î A*, q1 Î F

+

|--- вывод за какое-то количество шагов.

Перевод, определяемый конечными преобразованиями, называется регулярным («правильным»): S:= a + S |a-S| -a | +a | a.

Любое арифметическое выражение может содержать любое количество операторов - + - - + + - - а - + - - а, то есть ошибки при трансляции не будет. Транслятор сделает так, чтобы выдавался один оператор. Это происходит следующим образом.

Количество состояний:

S {+, -, а}.

D {+, -, а}.

Функцию отношения зададим диаграммой:

Для первого идентификатора, Для оставшихся идентификаторов

так как не ставим знак «+»;

(a + a - a) = итог.

(q0,- + - - + - a + - - a + + - - - +a,e)|→ (q1, + - - + - a + - - a + + - - - +a,e)| |→

(q1, - - + - a + - - a + + - - - +a,e) |→ (q0, - + - a + - - a + + - - - +a,e) |→

(q1, + - a + - - a + + - - - +a,e) |→ (q1,- a + - - a + + - - - +a,e) |→

(q0,a + - - a + + - - - +a,e) |→ (q2,+ - - a + + - - - +a,a) |→

(q3,- - a + + - - - +a, a) |→ (q4,- a + + - - - + a, a) |→

(q3,a + + - - - +a, a+a) |→ (q2,+ + - - - +a, a+a) |→

(q3,+ - - - +a, a+a) |→ (q3,- - - +a, a+a) |→

(q4,- - +a, a+a) |→ (q3, - +a, a+a) |→

(q4,+a, a+a) |→ (q4,a, a+a) |→ (q2,e, a+a-a)

Конечный преобразователь назовем детерминированным , если:

"q Î Q, |d(q,a)| £ 1, где |d(q,a)|- мощность;

d (q,e)=0.

Р ассмотрим автомат: (íq0, q1ý, íaý, íbý, d, q0, q1, e);

d( q0, a) = (q0, b);

d( q0, e) = (q0, b);

(q0, a, e) |→ (q1, e, b) |→ (q1, e, b)

Нужно в заключительном состоянии запретить е – такты.

3.5.4. Преобразователи с магазинной памятью

Они могут быть получены путем добавления автомату с магазинной памятью выходной цепочки.

МП – преобразователь содержит 8 символов:

{Q, S, Г, D, d, q0, Z, F}, где все элементы означают то же, что и раньше, кроме функции отображения:

d: Q*S*Г -> Q1**D* , где S - входной символ, Г – магазинный символ.

Конфигурация содержит 4 символа:

(q, aw, z, y),

где q – состояние;

aw – входная цепочка;

z – магазин;

y - входная цепочка.

d (q, a, gz) = (q1, az, b) – функция отображения;

(q, aw, gz, y)|¾ (q1, w, az, yb) Записывают только верх магазина (gz, az), дно не пишут.

Ц

+

епочку y называют выходом цепочки x, если: (

+

q, х, z, y)|¾ (q1, w, a, y).

Преобразователь переводит цепочку х в цепочку у опустошением магазина только тогда, когда имеет место следующее: (q, x, a, e)|¾ (q1, e, e, y).

Расширенный МП – преобразователь определяется аналогично расширенному МП – автомату.

Пример: Переведем польскую запись в некоторую цепочку. Используем все ту

же грамматику.

Запишем автомат:

{(q0,q1), (*,+,(,),i), (N T $), (*,+,(,),i), (d, q0, $, q1)}

(*,+,(,),i) – терминальные символы. (N – нетерминальные , T – терминальные).

Q*E*Г -> Q*Г**D*.

  1. (q0, e, E) = (q0, e+T, ET+);

  2. (q0, e, E) = (q0, T, T);

  3. (q0, e, T) = (q0, T*F, TF*);

  4. (q0, e, T) = (q0, F, F);

  5. (q0, e, F) = (q0, (E), E);

  6. (q0, e, F) = (q0, i, i);

  7. (q0, a, a) = (q0, e, e);

  8. (q0, e, e) = (q0, e, y).

i*(i+i) в этом случае мы должны получить iii+*.

(q0, i*(i+i), E, e) |¾ (q0, i*(i+i), T, T) |¾

(q0, i*(i+i), T*F, TF*) |¾ (q0, i*(i+i), T*(E), TE*) |¾

(

2

q0, i*(i+i), T*(E+T), TET+*) |¾ (q0, i*(i+i), T*(E+F), TEF+*) |¾

(q0, i*(i+i), T*(E+i), TEi+*) |¾ (q0, i*(i+i), T*(T+i), TTi+*) |¾

(

7

q0, i*(i+i), T*(i+i), Tii+*) |¾ (q0, i*(i+i), F*(i+i), Fii+*) |¾

(q0, i*(i+i), i*(i+i), iii+*) |¾ (q0, e, e$, iii+*) |¾ (q0, e, e, iii+*)

7 – сравнение выходной цепочки со входной.