A nested stack automaton has the same devices as a pushdown automaton, but has less restrictions for using them.
In automata theory, a nested stack automaton is a finite automaton that can make use of a stack containing data which can be additional stacks.[1]
Like a stack automaton, a nested stack automaton may step up or down in the stack, and read the current symbol; in addition, it may at any place create a new stack, operate on that one, eventually destroy it, and continue operating on the old stack. This way, stacks can be nested recursively to an arbitrary depth; however, the automaton always operates on the innermost stack only.
A nested stack automaton is capable of recognizing an indexed language,[2] and in fact the class of indexed languages is exactly the class of languages accepted by one-way nondeterministic nested stack automata.[1][3]
A (nondeterministic two-way) nested stack automaton is a tuple ⟨Q,Σ,Γ,δ,q0,Z0,F,[,],]⟩ where
Q, Σ, and Γ is a nonempty finite set of states, input symbols, and stack symbols, respectively,
[, ], and ] are distinct special symbols not contained in Σ ∪ Γ,
[ is used as left endmarker for both the input string and a (sub)stack string,
] is used as right endmarker for these strings,
] is used as the final endmarker of the string denoting the whole stack.[note 1]
An extended input alphabet is defined by Σ' = Σ ∪ {[,]}, an extended stack alphabet by Γ' = Γ ∪ {]}, and the set of input move directions by D = {-1,0,+1}.
δ, the finite control, is a mapping from Q × Σ' × (Γ' ∪ [Γ' ∪ {], []}) into finite subsets of Q × D × ([Γ* ∪ D), such that δ maps[note 2]
A configuration, or instantaneous description of such an automaton consists in a triple
⟨
q,
[a1a2...ai...an-1],
[Z1X2...Xj...Xm-1]
⟩,
where
q ∈ Q is the current state,
[a1a2...ai...an-1] is the input string; for convenience, a0 = [ and an = ] is defined[note 3] The current position in the input, viz. i with 0 ≤ i ≤ n, is marked by underlining the respective symbol.
[Z1X2...Xj...Xm-1] is the stack, including substacks; for convenience, X1 = [Z1[note 4] and Xm = ] is defined. The current position in the stack, viz. j with 1 ≤ j ≤ m, is marked by underlining the respective symbol.
When automata are allowed to re-read their input ("two-way automata"), nested stacks do not result in additional language recognition capabilities, compared to plain stacks.[5]
^Aho originally used "$", "¢", and "#" instead of "[", "]", and "]", respectively. See Aho (1969), p.385 top.
^Juxataposition denotes string (set) concatenation, and has a higher binding priority than set union ∪. For example, [Γ' denotes the set of all length-2 strings starting with "[" and ending with a symbol from Γ'.
^Aho originally used the left and right stack marker, viz. $ and ¢, as right and left input marker, respectively.
^The top symbol of a (sub)stack together with its preceding left endmarker "[" is viewed as a single symbol.
Each category of languages, except those marked by a *, is a proper subset of the category directly above it.Any language in each category is generated by a grammar and by an automaton in the category in the same line.