Задача 2. Распознаватель арифметических выражений

 

Определим данный АМП:

1) Множество входных символов: {x, +, *, (, ), }.

2) Множество магазинных символов: { A, B, Ñ}

3) Множество состояний: t, является также и начальным состоянием автомата.

4) Алгоритм работы автомата.

- Цепочка принимается, если при ее окончании всем левым скобкам нашлись правые, для всех арифметическим знаков нашлись соответствующие «x».

- Цепочка отвергается, если:

1. Количество правых скобок превысило количество левых.

2. Количество «x» превысило количество арифметических знаков более чем на единицу.

3. Входная цепочка прочитана до конца, а левым скобкам не нашлось пары.

4. Входная цепочка прочитана до конца, а некоторым арифметическим знакам не нашлось соответствующих «x».

Алгоритм работы:

- Если входная головка читает «(», то в магазин заталкивается А.

- Если входная головка читает «)», то из магазина выталкивается А.

- Если входная головка читает «+» или «*», то в магазин заталкивается В.

- Если входная головка читает «х», то из магазина выталкивается В.

- Цепочка принимается, если при достижении символа магазин пуст Ñ.

- Цепочка отвергается, если:

1. На входе остаются правые скобки «)» или «х», а магазин пуст Ñ.

2. При достижении символа в магазине остаются символы А или В.

 

Магазинные символы Входные символы
+, * х ( )
А ↓В, → Отвергнуть ↓A, → ↑, → Отвергнуть
В ↓В, → ↑, → ↑↓A↓В, → Отвергнуть Отвергнуть
Ñ ↓В, → Отвергнуть ↓A, → Отвергнуть Допустить

 

5) В начальном состоянии магазин содержит (ВÑ).

 

Пример 1: х+х*(х+х)

 

Номер шага Содержимое стека Остаток вх. цепочки
ÑВ х+х*(х+х) ┤
Ñ +х*(х+х) ┤
ÑВ х*(х+х) ┤
Ñ *(х+х) ┤
ÑВ (х+х) ┤
ÑAB х+х) ┤
ÑA +х) ┤
ÑAB х) ┤
ÑA ) ┤
Ñ

 

Пример 2: x+x*(+x)

 

Номер шага Содержимое стека Остаток вх. цепочки
ÑВ х+х*(+х) ┤
Ñ +х*(+х) ┤
ÑВ х*(+х) ┤
Ñ *(+х) ┤
ÑВ (+х) ┤
ÑAB +х) ┤
ÑABB х) ┤
ÑAB ) ┤

 

 

Теорема: класс языков, допускаемых МП-автоматами как по заключительному состоянию так и по пустому магазину совпадает с классом контекстно-свободных (КС) языков.

 

 

Задать язык списков типа а;[a;a;a;] распознающим АМП.

Определим данный АМП:

1) Множество входных символов: {a,;, [, ], }.

2) Множество магазинных символов: { A, B, Ñ}

3) Множество состояний: t, является также и начальным состоянием автомата.

4) Алгоритм работы автомата.

- Цепочка принимается, если при ее окончании всем левым скобкам нашлись правые, для всех «a» нашлись соответствующие «;».

- Цепочка отвергается, если:

1. Количество правых скобок превысило количество левых.

2. Количество «;» превысило количество «a».

3. Входная цепочка прочитана до конца, а левым скобкам не нашлось пары.

4. Входная цепочка прочитана до конца, а для некоторых элементов «a» не нашлось символа конца «;».

Алгоритм работы:

- Если входная головка читает «(», то в магазин заталкивается А.

- Если входная головка читает «)», то из магазина выталкивается А.

- Если входная головка читает «а», то в магазин заталкивается В.

- Если входная головка читает «;», то из магазина выталкивается В.

- Цепочка принимается, если при достижении символа магазин пуст Ñ.

- Цепочка отвергается, если:

1. На входе остаются правые скобки «)» или «;», а магазин пуст Ñ.

2. При достижении символа в магазине остаются символы А или В.

5) В начальном состоянии магазин пуст (Ñ).

 

Магазинные символы Входные символы
a ; ( )
А ↓В, → Отвергнуть ↓A, → ↑, → Отвергнуть
В ↓В, → ↑, → Отвергнуть Отвергнуть Отвергнуть
Ñ ↓В, → Отвергнуть ↓A, → Отвергнуть Допустить