Задача 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, → Отвергнуть Допустить

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: