Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
госы 2013.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
4.38 Mб
Скачать

48. Разбор с возвратами. Построение и формальное описание автомата с двумя магазинами.

Автомат с двумя магазинами

Устранение недетерминированности требует введения некоторого однозначного порядка выбора альтернатив, обеспечивающего получение требуемого результата процесса анализа входной цепочки. Очевидно, что механизм, реализующий выбор альтернатив, должен иметь возможность запоминания сведений о применяемых альтернативах и позволять выполнять перебор альтернатив с соответствующими перемещениями читающей головки. Примером устройства, детерминированно выполняющего нисходящий разбор (вывод) при наличии альтернативных вариантов правил вывода, является автомат с двумя магазинами (МПА-2). Принципиальные отличия в конструкции МПА-2 от МПА, заключаются в наличии второго магазина и возможности обратного перемещения читающей головки - рис.

Учитывая, что каждый символ входной ленты однозначно идентифицируется его номером, а совокупность этих номеров образует множество I={1, 2, …, i, …, m}, формальное описание МПА-2 можно представить в виде:

P2 = (Q, T, Г1, Г2, , q, S, t),

где Q – множество состояний УУ, Q={r,q,t};

T – входной алфавит;

Г1 – алфавит магазина М1;

Г2 – алфавит магазина М2;

 – правило отображения Q  I  Г2  Г1  Q  I  Г2*  Г1* (I - позиция, в которой находится читающая головка);

q – начальное состояние УУ, q0Q;

S – символ, изначально помещаемый в магазин М1;

f – заключительное состояние УУ.

Конфигурация МПА-2 определяется совокупностью состояния устройства управления s, номера обозреваемого символа i, символа в вершине магазине М2  и символа в вершине магазина М1  - (s,i,,). Начальной конфигурацией МПА-2 является (q,1,e,@S), а заключительной (соответствующей допуску анализируемой цепочки) - (t,m+1,,e).

Алгоритм построения МПА-2 по заданной КС-грамматике

Вход: КС-грамматика G=(N,T,P,S).

Выход: МПА-2 P2 = (Q, T, Г1, Г2, , q, S, t), допускающий язык L(Р2): L(Р2)=L(G).

Процесс:

1. Элементы T и S МПА-2 соответствуют элементам T и S исходной КС-грамматики.

2. Положить Г1=N  T  {@}.

3. Ввести обозначения для всех правил из P: для каждого A  1|2|…|n  P обозначением A  i считать Ai. Алфавит Г2 образуется объединением множества полученных обозначений и входного алфавита T. Введенные обозначения считать именами правил.

4. Сформировать правила вывода (q-правила):

  • (q,m+1,e,@) = (t,m+1,e,@) - если УУ находится в состоянии q, читающая головка вышла вправо за пределы входной ленты и магазин М1 содержит только маркер дна магазина, то автомат переходит в заключительную конфигурацию с выдачей сигнала "допуск";

  • (q,i,e,A) = (q,i,A1,1-1) для всех правил продукции A1 1 - если УУ находится в состоянии q и на вершине магазина М1 находится нетерминальный символ, то заменить его правой частью правила продукции, в левой части которого имеется этот символ, записанной в обратном порядке (если таких правил несколько, берется только первое из них), и поместить в магазин М2 имя этого правила;

  • (q,i,e,a) = (q,i+1,a,e) при условии ai=a - если УУ находится в состоянии q и на вершине магазина М1 находится терминальный символ, совпадающий с обозреваемым символом в ячейке i входной ленты, то выбросить этот символ из магазина М1, записать его в магазин М2 и сдвинуть читающую головку вправо;

  • (q,i,e,a) = (r,i,e,a) при условии aia - если УУ находится в состоянии q и на вершине магазина М1 находится терминальный символ, не совпадающий с обозреваемым символом на входной ленте, то перевести УУ в состояние r.

5. Сформировать правила возврата (r-правила):

  • (r,i,a,e) = (r,i-1,e,a) - если УУ находится в состоянии r и на вершине магазина М2 находится терминальный символ, то переписать его из магазина М2 в магазин М1 и сдвинуть читающую головку влево;

  • (r,i,Aj,j-1) = (q,i,Aj+1,j+1-1) (Aj)(Aj+1  j+1  P) - если УУ находится в состоянии r и на вершине магазина М2 находится имя правила, для которого есть альтернативное правило с большим номером, то имя этого альтернативного правила поместить в М2, правую часть (в обратном порядке) - в М1, и перевести УУ в состояние q;

  • (r,i,Aj,j-1) = (r,i,e,A) (Aj)(Aj+1  j+1  P) - если УУ находится в состоянии r и на вершине магазина М2 находится имя правила, для которого нет альтернативного правила с большим номером, то выполнить выброс имени правила из М2 и поместить в М1 нетерминал из левой части этого правила;

  • (r,1,Sk,k-1) = ошибка при условии (Sk+1  k+1  P) - если УУ находится в состоянии r, на вершине магазина М2 находится имя последнего из правил для начального символа грамматики и читающая головка находится у первого символа на входной ленте, то работа МПА-2 прекращается с выдачей сигнала "ошибка".

Приведенный алгоритм позволяет получить МПА-2, реализующий нисходящий левосторонний разбор (левосторонний вывод) с возвратами. Действиям, связанным с выводом, соответствуют конфигурации с состоянием УУ, равным q, а возврату - r. Процесс вывода аналогичен реализуемому обычным МПА, но на каждом шаге вывода при наличии нескольких альтернативных правил выбирается первое из них с запоминаем имени выбранного правила. Критерием правильности выполняемых шагов вывода является совпадение выводимых терминальных символов с соответствующими символами на входной ленте - при обнаружении несовпадения автомат переходит к действиям, связанным с возвратом. Процесс возврата (отката) определяется содержимым магазина М2, хранящим "историю" вывода - терминальные символы возвращаются в М1 (со сдвигом читающей головки), а появление имени правила свидетельствует о том, что было использовано соответствующее этому имени правило, и при этом магазин М1 содержит его правую часть. В последнем случае автомат пытается применить следующее альтернативное правило с переходом к действиям по выводу, а при его отсутствии - осуществляет свертку правой части правила в М1 к порождающему ее нетерминальному символу и продолжает действия по возврату. Допуск цепочки происходит при опустошенном магазине М1 и полностью прочитанной входной ленте, а ошибка фиксируется в случае невозможности выбора следующей альтернативы для начального символа грамматики при выполнении действий по возврату.

МПА-2 позволяют осуществлять разбор предложений языков, порождаемых любыми КС-грамматиками, кроме леворекурсивных.

Грамматика G называется леворекурсивной, если хотя бы для одного ее нетерминального символа A существует вывод цепочки, начинающейся на A (A+A). Если в грамматике есть хотя бы одно правило вида A A, то она непосредственно леворекурсивна. Наличие левой рекурсии в КС-грамматике при левостороннем нисходящем разборе может привести к зацикливанию.

Существует алгоритм устранения непосредственной левосторонней рекурсии в КС-грамматиках, основанная идея которого может быть продемонстрирована следующим примером: леворекурсивное правило <сумма>  <сумма> + <слагаемое> можно заменить следующими тремя правилами без изменения порождаемых цепочек:

<сумма>  <слагаемое> <продолжение суммы>

<продолжение суммы>  +<слагаемое><продолжение суммы>|e

Анализируя работу МПА-2, можно заметить, что поиск решения производится путем перебора всех возможных вариантов вывода, причем анализ ошибочной цепочки потребует полного перебора.

Построить МПА-2 для следующей грамматики арифметических выражений:

GАВ = ({Е,T,F},{+,*,a},Р,E),

Р: E  Е+T | T

T  TF | F

F  (E) | a

Грамматика GАВ содержит два леворекурсивных символа - E и T, т.е. является непосредственно леворекурсивной. После применения алгоритма устранения непосредственной левой рекурсии правила продукций следующие (в скобках указаны имена):

GАВ' = ({Е,E',T,T',F},{+,*,a},Р',E),

Р': E  TE' (E1)

E'  +TE' | e (E'1,E'2)

T  FT' (T1)

T'  *FT' | e (T'1,T'2)

F  (E) | a (F1,F2)

Построение МПА-2 сведем к формированию правил, составляющих :

  1. (q,m+1,e,@) = (t,m+1,e,@) - допуск

  2. (q,i,e,E) = (q,i,E1,E'T) - по правилу E1

  3. (q,i,e,E') = (q,i,E'1,E'T+) - по правилу E'1

  4. (q,i,e,T) = (q,i,T1,T'F) - по правилу T1

  5. (q,i,e,T') = (q,i,T'1,T'F) - по правилу T'1

  6. (q,i,e,F) = (q,i,F1,)E( ) - по правилу F1,

  7. (q,i,e,t) = (q,i+1,t,e) для всех tT - считывание входных символов, совпадающих с символами в вершине магазина М1

  8. (q,i,e,t) = (r,i,t,e) для всех tT - переход к действиям по возврату при несовпадении входных символов с символами в вершине магазина М1

  9. (r,i,t,e) = (r,i-1,e,t) для всех tT - действия по возврату для всех терминальных символов, находящихся в вершине М2

  10. (r,i,E'1,E'T+) = (q,i,E'2,e) - при возврате для правила E'1 переход к попытке использования правила E'2

  11. (r,i,E'2,e) = (r,i,e,E') - при возврате для правила E'2 переход к возврату для нетерминального символа E'

  12. (r,i,T1,T'F) = (r,i,e,T) - при возврате для правила T1 переход к возврату для нетерминального символа T

  13. (r,i,T'1,T'F) = (q,i,T'2,e) - при возврате для правила T'1 переход к попытке использования правила T'2

  14. (r,i,T'2,e) = (r,i,e,T') - при возврате для правила T'2 переход к возврату для нетерминального символа T'

  15. (r,i,F1,)E( ) = (q,i,F2,a) - при возврате для правила F1 переход к попытке использования правила F2

  16. (r,i,F2,a) = (r,i,e,F) - при возврате для правила F2 переход к возврату для нетерминального символа F

  17. (r,i,E1,E'T) = ошибка - при возврате для правила E1 фиксация ошибки, означающей наличие синтаксической ошибки в анализируемой цепочке.

Далее приведена последовательность тактов сформированного автомата при разборе цепочки "aa".

Конфигурация

автомата

Вход

№ правила

Примечания

(q,1,e,@E)

a  a

2

Вывод для E по первому правилу

(q,1,E1,@E'T)

a  a

4

Вывод для T по первому правилу

(q,1,E1T1,@E'T'F)

a  a

6

Вывод для F по первому правилу

(q,1,E1T1F1,@E'T')E( )

a  a

8

Несовпадение символов - возврат

(r,1,E1T1F1,@E'T')E( )

a  a

15

Выбор второй альтернативы для F

(q,1,E1T1F2,@E'T'a)

a  a

7

Совпадение символов

(q,2,E1T1F2a,@E'T')

a a

5

Вывод для T' по первому правилу

(q,2,E1T1F2aT'1,@E'T'F)

a a

7

Совпадение символов

(q,3,E1T1F2aT'1,@E'T'F)

a a

6

Вывод для F по первому правилу

(q,3,E1T1F2aT'1F1,@E'T')E( )

a a

8

Несовпадение символов - возврат

(r,3,E1T1F2aT'1F1,@E'T')E( )

a a

15

Выбор второй альтернативы для F

(q,3,E1T1F2aT'1F2,@E'T'a)

a a

7

Совпадение символов

(q,4,E1T1F2aT'1F2a,@E'T')

a  a

5

Вывод для T' по первому правилу

(q,4,E1T1F2aT'1F2aT'1,@E'T'F)

a  a

8

Несовпадение символов - возврат

(r,4,E1T1F2aT'1F2aT'1,@E'T'F)

a  a

13

Выбор второй альтернативы для T'

(q,4,E1T1F2aT'1F2aT'2,@E')

a  a

3

Выбор первой альтернативы для E'

(q,4,E1T1F2aT'1F2aT'2E'1,@E'T+)

a  a

8

Несовпадение символов - возврат

(r,4,E1T1F2aT'1F2aT'2E'1,@E'T+)

a  a

10

Выбор второй альтернативы для E'

(q,4,E1T1F2aT'1F2aT'2E'2,@)

a  a

1

Допуск