Автомат вложенного стека - Nested stack automaton

Вложенный стековый автомат имеет те же устройства, что и выталкивающий автомат, но имеет меньше ограничений на их использование.

В теория автоматов, а автомат вложенного стека это конечный автомат который может использовать куча содержащие данные, которые могут быть дополнительными стеками.[1] Как стековый автомат автомат с вложенным стеком может переходить вверх или вниз по стеку и читать текущий символ; кроме того, он может в любом месте создать новый стек, работать с ним, в конечном итоге уничтожить его и продолжить работу со старым стеком. Таким образом, стеки могут быть вложены рекурсивно на произвольную глубину; однако автомат всегда работает только с самым внутренним стеком.

Вложенный стековый автомат способен распознавать индексированный язык,[2] и на самом деле класс индексированных языков - это в точности класс языков, принимаемых односторонним недетерминированный вложенные стековые автоматы.[1][3]

Вложенные стековые автоматы не следует путать с встроенные выталкивающие автоматы, которые имеют меньшую вычислительную мощность.[нужна цитата ]

Формальное определение

Автомат

Автомат с вложенным стеком (недетерминированный двусторонний) - это кортеж ⟨Q, Σ, Γ, δ,q0,Z0,F,[,],]⟩ куда

  • Q, Σ, а Γ - непустое конечное множество состояний, входных символов и символов стека соответственно,
  • [, ], и ] - различные специальные символы, не содержащиеся в Σ ∪ Γ,
    • [используется как левый указатель конца как для входной строки, так и для (под) строки стека,
    • ] используется как маркер правого конца для этих строк,
    • ] используется в качестве последнего маркера конца строки, обозначающего весь стек.[примечание 1]
  • Расширенный входной алфавит определяется как Σ '= Σ ∪ {[,]}, расширенный стековый алфавит определяется как Γ' = Γ ∪ {]}, а множество входных направлений движения определяется как D = {-1,0,+1}.
  • δ, конечное управление, является отображением из Q × Σ '× (Γ' ∪ [Γ '∪ {], []}) на конечные подмножества Q × D × ([Γ*D) такое, что δ отображает[заметка 2]
     Q × Σ '× [Γна подмножества Q × D × [Γ*(режим выталкивания),
Q × Σ '× Γ'на подмножества Q × D × D(режим чтения),
Q × Σ '× [Γ'на подмножества Q × D × {+1}(режим чтения),
Q × Σ '× {]}на подмножества Q × D × {-1}(режим чтения),
Q × Σ '× (Γ' ∪ [Γ ')на подмножества Q × D × [Γ*](режим создания стека) и
Q × Σ '× {[]}на подмножества Q × D × {ε },(режим разрушения стека),
Неформально верхний символ (под) стека вместе с предшествующим ему левым маркером конца "[" рассматривается как один символ;[4] тогда δ читается как
  • текущее состояние,
  • текущий входной символ и
  • текущий символ стека,
и выходы
  • следующее состояние,
  • направление, в котором нужно двигаться на входе, и
  • направление, в котором следует двигаться по стеку, или строка символов для замены самого верхнего символа стека.
  • q0Q начальное состояние,
  • Z0 ∈ Γ - начальный символ стека,
  • FQ - множество конечных состояний.

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

А конфигурация, или же мгновенное описание такого автомата состоит из тройки ⟨q,[а1а2...ая...ап-1], [Z1Икс2...Иксj...Иксм-1]⟩,куда

  • qQ текущее состояние,
  • [а1а2...ая...ап-1] - входная строка; для удобства, а0 = [и ап =] определяется[заметка 3] Текущая позиция во входных данных, а именно. я с 0 ≤ яп, отмечен подчеркиванием соответствующего символа.
  • [Z1Икс2...Иксj...Иксм-1] - стек, включая подстаки; для удобства, Икс1 = [Z1 [примечание 4] и Иксм = ] определено. Текущая позиция в стеке, а именно. j с 1 ≤ jм, отмечен подчеркиванием соответствующего символа.

Пример

Пример выполнения (строка ввода не показана):

ДействиеШагКуча
1:      [аб[k][п]c] 
создать подстак2:[аб[k][п[рs]]c]
поп3:[аб[k][п[s]]c] 
поп4:[аб[k][п[]]c] 
уничтожить субстак5:[аб[k][п]c] 
двигаться вниз6:[аб[k][п]c] 
двигаться вверх7:[аб[k][п]c] 
двигаться вверх8:[аб[k][п]c] 
толкать9:[аб[k][поп]c] 

Характеристики

Когда автоматам разрешено перечитывать вводимые данные ("двусторонние автоматы ") вложенные стеки не дают дополнительных возможностей распознавания языка по сравнению с простыми стеками.[5]

Гилман и Шапиро использовали вложенные стековые автоматы для решения проблема со словом в определенных группы.[6]

Примечания

  1. ^ Изначально Aho использовал «$», «¢» и «#» вместо «[», «]» и «]"соответственно. См. Ахо (1969), стр. 385 вверху.
  2. ^ Juxataposition означает строка (набор) конкатенация, и имеет более высокий приоритет привязки, чем set union ∪. Например, [Γ 'обозначает набор всех строк длины 2, начинающихся с «[» и заканчивающихся символом из Γ'.
  3. ^ Изначально Aho использовал левый и правый маркер стека, а именно. $ и ¢, как правый и левый маркер ввода, соответственно.
  4. ^ Верхний символ (под) стека вместе с предшествующим ему левым маркером конца «[» рассматривается как один символ.

Рекомендации

  1. ^ а б Ахо, Альфред В. (Июль 1969 г.). «Вложенные автоматы стека». Журнал ACM. 16 (3): 383–406. Дои:10.1145/321526.321529. S2CID  685569.
  2. ^ Partee, Барбара; Алиса тер Мёлен; Роберт Э. Уолл (1990). Математические методы в лингвистике. Kluwer Academic Publishers. стр.536 –542. ISBN  978-90-277-2245-4.
  3. ^ Джон Э. Хопкрофт, Джеффри Д. Ульман (1979). Введение в теорию автоматов, языки и вычисления. Эддисон-Уэсли. ISBN  0-201-02988-X. Здесь: с.390
  4. ^ Ахо (1969), стр. 385 вверху
  5. ^ Бери, К. (июнь 1975 г.). «Двусторонние вложенные стековые автоматы эквивалентны двусторонним стековым автоматам». Журнал компьютерных и системных наук. 10 (3): 317–339. Дои:10.1016 / s0022-0000 (75) 80004-3.
  6. ^ Шапиро, Роберт Гилман, Майкл (4 декабря 1998 г.). О группах, проблема слов которых решается автоматом с вложенным стеком (Технический отчет). arXiv:математика / 9812028. CiteSeerX  10.1.1.236.2029. S2CID  12716492.