Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория языков программирования и методы трансляции.-1.pdf
Скачиваний:
21
Добавлен:
05.02.2023
Размер:
1.63 Mб
Скачать

35

2.3.2 СПОСОБЫ ЗАДАНИЯ ДМП-АВТОМАТА

Существуют различные способы задания ДМПА – например, матема-

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

Так, на рис. 2.5 изображена часть графа переходов ДМПА, соответ-

ствующая переходу δ(q, a, Z) = (q', ).

q

(a, Z, )

q'

Рисунок 2.5 – Переход в графе ДМПА

В графе переходов ДКА дуги достаточно помечать только символами алфавита Σ (рис. 2.6).

q

a

q'

Рисунок 2.6 – Переход в графе ДКА

Если состояние q является конечным, т.е. q F, то на графе оно отобра-

жается в виде окружности с двойной границей (рис. 2.7).

36

q

a

q'

Рисунок 2.7 – Переход в конечное состояние ДКА

Проблема в том, что в ДМПА конечное состояние может быть дости-

жимо только при определенном состоянии стека. На графе для этого прихо-

дится вводить новые искусственные состояния. Например, на рис. 2.8 изоб-

ражена ситуация, когда состояние q' является конечным лишь в том случае,

если на вершине стека находится символ Z'.

q

q''

(a, Z, ) (e, Z', Z')

q'

Рисунок 2.8 – Переход в конечное состояние ДМПА

Дополнительно примем соглашение, что если Z = , то это соответ-

ствует требованию пустоты стека.

В таблице переходов ДМПА каждому состоянию соответствует от-

дельная строка таблицы, а каждой допустимой комбинации (a, Z), a Σ{e} { }, Z Γ, – отдельный столбец (см. табл. 2.5). Комбинации (a, Z)

должны быть такими, что в любой конфигурации ДМПА существует только один вариант перехода в новое состояние. Ячейки таблицы δ(q, a, Z) могут принимать следующие варианты значений:

37

Пара (q', ), соответствующая переходу в состояние q' и запись це-

почки на вершину стека;

Элемент HALT, соответствующий успешному завершению разбора,

т.е. ситуации, когда a = , q F (на графе отображается как окруж-

ность с двойной границей);

Элемент ERROR, соответствующий синтаксической ошибке (на графе это ситуация, когда отсутствует дуга из состояния q в состояние q' с меткой (a, Z, )).

Таблица 2.5 – Таблица переходов ДМПА

 

(a1, Z1)

(a2, Z2)

(a3, Z3)

 

 

 

 

 

q0

δ(q0, a1, Z1)

δ(q0, a2, Z2)

δ(q0, a3, Z3)

 

 

 

 

 

q1

δ(q1, a1, Z1)

δ(q1, a2, Z2)

δ(q1, a3, Z3)

 

 

 

 

 

q2

δ(q2, a1, Z1)

δ(q2, a2, Z2)

δ(q2, a3, Z3)

 

 

 

 

 

 

 

 

 

 

Так, графу на рис. 2.8 будет соответствовать таблица переходов вида

табл. 2.6.

Таблица 2.6 – Таблица переходов ДМПА с конечным состоянием

 

(a, Z)

(e, Z')

( , Z')

 

 

 

 

q

(q', )

ERROR

ERROR

 

 

 

 

q'

ERROR

(q'', Z')

ERROR

 

 

 

 

q''

ERROR

ERROR

HALT

 

 

 

 

Однако, с использованием таблицы переходов, можно обойтись без но-

вых искусственных состояний, чтобы показать достижимость конечного со-

стояния ДМПА (табл. 2.7).

Таблица 2.7 – Упрощенная таблица переходов ДМПА с конечным состоянием

 

(a, Z)

( , Z')

 

 

 

38

q

(q', )

ERROR

 

 

 

q'

ERROR

HALT

 

 

 

В принципе, оба варианта таблицы допустимы. В дальнейшем для про-

стоты вместо записи элемента ERROR будем оставлять ячейки таблиц пу-

стыми.

В таблице переходов ДКА каждому состоянию соответствует отдель-

ная строка таблицы, а каждому допустимому входному символу a Σ{ } –

отдельный столбец (см. табл. 2.8). Ячейки таблицы δ(q, a) могут принимать следующие варианты значений:

Элемент q', соответствующий переходу в состояние q';

Элемент HALT, соответствующий успешному завершению разбора,

т.е. ситуации, когда a = , q F (на графе отображается как окруж-

ность с двойной границей);

Элемент ERROR, соответствующий синтаксической ошибке (на графе это ситуация, когда отсутствует дуга из состояния q в состоя-

ние q' с меткой a).

Таблица 2.8 – Таблица переходов ДКА

 

a1

a2

 

 

 

 

 

 

q0

δ(q0, a1)

δ(q0, a2)

δ(q0, )

 

 

 

 

 

q1

δ(q1, a1)

δ(q1, a2)

δ(q1, )

 

 

 

 

 

q2

δ(q2, a1)

δ(q2, a2)

δ(q2, )

 

 

 

 

 

 

 

 

 

 

В общем случае, построение графа или таблицы переходов конечного автомата – задача неформализованная, и предполагает некоторый творческий подход. Можно лишь дать некоторые рекомендации:

1.Проще всего сначала построить граф переходов, а потом по описан-

ным выше правилам преобразовать его в таблицу переходов.