Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Pushdown automaton
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{short description|Type of automaton}} {{More citations needed|date=April 2022}} {{Automata theory}} In the [[theory of computation]], a branch of [[theoretical computer science]], a '''pushdown automaton''' ('''PDA''') is a type of [[Automata theory|automaton]] that employs a [[Stack (data structure)|stack]]. Pushdown automata are used in theories about what can be computed by machines. They are more capable than [[finite-state machine]]s but less capable than [[Turing machine]]s (see [[#Turing machines|below]]). [[Deterministic pushdown automata]] can recognize all [[deterministic context-free language]]s while nondeterministic ones can recognize all [[context-free language]]s, with the former often used in [[parser]] design. The term "pushdown" refers to the fact that the [[Stack (abstract data type)|stack]] can be regarded as being "pushed down" like a tray dispenser at a cafeteria, since the operations never work on elements other than the top element. A '''stack automaton''', by contrast, does allow access to and operations on deeper elements. Stack automata can recognize a strictly larger set of languages than pushdown automata.<ref name="Hopcroft.Ullman.1967"/> A [[nested stack automaton]] allows full access, and also allows stacked values to be entire sub-stacks rather than just single finite symbols. == Informal description == [[Image:Pushdown-overview.svg|thumb|340px|A diagram of a pushdown automaton]] A [[finite-state machine]] only considers the input signal and the current state: it has no stack to work with and therefore is unable to access previous values of the input. It can only choose a new state, the result of following the transition. A '''pushdown automaton (PDA)''' differs from a finite state machine in two ways: # It can use the top of the stack to decide which transition to take. # It can manipulate the stack as part of performing a transition. A pushdown automaton reads a given input string from left to right. In each step, it chooses a transition by indexing a table by input symbol, current state, and the symbol at the top of the stack. <!---wrong, or at least strongly misleading, for properly nondeterministic PDA:---This means that those three parameters completely determine the transition path that is chosen.---><!---don't know what this sentence is supposed to mean:---Pushdown automata add the stack as a parameter for choice.---> A pushdown automaton can also manipulate the stack, as part of performing a transition. The manipulation can be to push a particular symbol to the top of the stack, or to pop off the top of the stack. The automaton can alternatively ignore the stack, and leave it as it is. <!---misleading for properly nondeterministic PDA:---The choice of manipulation (or no manipulation) is determined by the transition table.---> Put together: Given an input symbol, current state, and stack symbol, the automaton can follow a transition to another state, and optionally manipulate (push or pop) the stack. If, in every situation, at most one such transition action is possible, then the automaton is called a '''[[deterministic pushdown automaton]] (DPDA)'''. In general, if several actions are possible, then the automaton is called a '''general''', or '''nondeterministic''', '''PDA'''. A given input string may drive a nondeterministic pushdown automaton to one of several configuration sequences; if one of them leads to an accepting configuration after reading the complete input string, the latter is said to belong to the ''language accepted by the automaton''. <!---has been said more precisely above:---Nondeterministic PDAs are able to handle situations where more than one choice of action is available.---><!---don't know what these paragraphs are supposed to mean; automata don't create 'instances' during their operation; PDAs are a theoretical model, implemetation problems aren't an issue here, see [[Earley parser]], [[LR parser]], etc., instead---:In principle, it is enough{{clarify|date=December 2016}} to create in every such case new automaton instances that will handle the extra choices. === Backtracking === The problem with multiple automata per choice is that in practice most of these instances fail. This can severely affect the automaton's performance as the execution of multiple instances is a costly operation. Situations such as these can be identified in the design phase of the automaton by examining{{how|date=December 2016}} the grammar the automaton uses. This makes possible the use of [[backtracking]] in every such case in order to improve the performance of pushdown automaton.---> == Formal definition == We use standard formal language notation: <math>\Gamma^{*}</math> denotes the set of finite-length [[string (computer science)|string]]s over alphabet <math>\Gamma</math> and <math>\varepsilon</math> denotes the [[empty string]]. A PDA is formally defined as a 7-tuple: <math>M=(Q, \Sigma, \Gamma, \delta, q_{0}, Z, F)</math> where *<math>Q</math> is a finite set of ''states'' *<math>\Sigma</math> is a finite set which is called the ''input alphabet'' *<math>\Gamma</math> is a finite set which is called the ''stack alphabet'' *<math>\delta</math> is a finite subset of <math>Q \times (\Sigma \cup \{\varepsilon\}) \times \Gamma \times Q \times \Gamma^*</math>,<!---don't change "\times" to "\rightarrow": \delta is not a function, but a relation, i.a. a subset of a cartesian product---> the ''transition relation'' *<math>q_{0} \in Q </math> is the ''start state'' *<math>Z \in \Gamma</math> is the ''initial stack symbol'' *<math>F \subseteq Q</math> is the set of ''accepting states'' An element <math>(p,a,A,q,\alpha) \in \delta</math> is a transition of <math>M</math>. It has the intended meaning that <math>M</math>, in state <math>p \in Q</math>, on the input <math>a \in \Sigma \cup \{\varepsilon\}</math> and with <math>A \in \Gamma</math> as topmost stack symbol, may read <math>a</math>, change the state to <math>q</math>, pop <math>A</math>, replacing it by pushing <math>\alpha \in \Gamma^*</math>. The <math>(\Sigma \cup \{\varepsilon\})</math> component of the transition relation is used to formalize that the PDA can either read a letter from the input, or proceed leaving the input untouched.{{citation needed|date=January 2019}} In many texts{{sfn|Hopcroft|Ullman|1979|p=110}}<!---more ref.s needed to substantiate 'many'---> the transition relation is replaced by an (equivalent) formalization, where * <math>\delta</math> is the ''transition function'', mapping <math>Q \times (\Sigma \cup \{\varepsilon\}) \times \Gamma</math> into finite subsets of <math>Q \times \Gamma^*</math> Here <math>\delta(p, a, A)</math> contains all possible actions in state <math>p</math> with <math>A</math> on the stack, while reading <math>a</math> on the input. One writes for example <math>\delta(p, a, A) = \{(q, BA)\}</math> precisely when <math>(q, BA) \in \{(q, BA)\}, (q, BA) \in \delta(p, a, A),</math> because <math>((p, a, A), \{(q, BA)\}) \in \delta</math>. Note that ''finite'' in this definition is essential. === Computations === [[Image:Pushdown-step.svg|thumb|200px|a step of the pushdown automaton]] In order to formalize the semantics of the pushdown automaton a description of the current situation is introduced. Any 3-tuple <math>(p,w,\beta) \in Q \times \Sigma^* \times \Gamma^*</math> is called an instantaneous description (ID) of <math>M</math>, which includes the current state, the part of the input tape that has not been read, and the contents of the stack (topmost symbol written first). The transition relation <math>\delta</math> defines the step-relation <math>\vdash_{M}</math> of <math>M</math> on instantaneous descriptions. For instruction <math>(p,a,A,q,\alpha) \in \delta</math> there exists a step <math>(p,ax,A\gamma) \vdash_{M} (q,x,\alpha\gamma)</math>, for every <math>x\in\Sigma^*</math> and every <math>\gamma\in \Gamma^*</math>. In general pushdown automata are nondeterministic meaning that in a given instantaneous description <math>(p,w,\beta)</math> there may be several possible steps. Any of these steps can be chosen in a computation. With the above definition in each step always a single symbol (top of the stack) is popped, replacing it with as many symbols as necessary. As a consequence no step is defined when the stack is empty. Computations of the pushdown automaton are sequences of steps. The computation starts in the initial state <math>q_{0}</math> with the initial stack symbol <math>Z</math> on the stack, and a string <math>w</math> on the input tape, thus with initial description <math>(q_{0},w,Z)</math>. There are two modes of accepting. The pushdown automaton either accepts by final state, which means after reading its input the automaton reaches an accepting state (in <math>F</math>), or it accepts by empty stack (<math>\varepsilon</math>), which means after reading its input the automaton empties its stack. The first acceptance mode uses the internal memory (state), the second the external memory (stack). Formally one defines # <math>L(M) = \{ w\in\Sigma^* | (q_{0},w,Z) \vdash_M^* (f,\varepsilon,\gamma)</math> with <math>f \in F</math> and <math>\gamma \in \Gamma^* \}</math> (final state) # <math>N(M) = \{ w\in\Sigma^* | (q_{0},w,Z) \vdash_M^* (q,\varepsilon,\varepsilon)</math> with <math>q \in Q \}</math> (empty stack) Here <math>\vdash_M^*</math> represents the [[reflexive closure|reflexive]] and [[transitive closure]] of the step relation <math>\vdash_M</math> meaning any number of consecutive steps (zero, one or more). For each single pushdown automaton these two languages need to have no relation: they may be equal but usually this is not the case. A specification of the automaton should also include the intended mode of acceptance. Taken over all pushdown automata both acceptance conditions define the same family of languages. '''Theorem.''' For each pushdown automaton <math>M</math> one may construct a pushdown automaton <math>M'</math> such that <math>L(M)=N(M')</math>, and vice versa, for each pushdown automaton <math>M</math> one may construct a pushdown automaton <math>M'</math> such that <math>N(M)=L(M')</math> == Example == The following is the formal description of the PDA which recognizes the language <math>\{0^n1^n \mid n \ge 0 \}</math> by final state: [[Image:Pda-example.svg|thumb|200px|PDA for <math>\{0^n1^n \mid n \ge 0\}</math><br/>(by final state)]] <math>M=(Q,\ \Sigma,\ \Gamma,\ \delta, \ q_{0},\ Z, \ F)</math>, where *'''states:''' <math>Q = \{ p,q,r \}</math> *'''input alphabet:''' <math>\Sigma = \{0, 1\}</math> *'''stack alphabet:''' <math>\Gamma = \{A, Z\}</math> *'''start state:''' <math>q_{0} = p</math> *'''start stack symbol:''' {{mvar|Z}} *'''accepting states:''' <math>F = \{r\}</math> The transition relation <math>\delta</math> consists of the following six instructions: :<math>(p,0,Z,p,AZ)</math>, :<math>(p,0,A,p,AA)</math>, :<math>(p,\epsilon,Z,q,Z)</math>, :<math>(p,\epsilon,A,q,A)</math>, :<math>(q,1,A,q,\epsilon)</math>, and :<math>(q,\epsilon,Z,r,Z)</math>. In words, the first two instructions say that in state {{mvar|p}} any time the symbol {{val|0}} is read, one {{mvar|A}} is pushed onto the stack. Pushing symbol {{mvar|A}} on top of another {{mvar|A}} is formalized as replacing top {{mvar|A}} by {{mvar|AA}} (and similarly for pushing symbol {{mvar|A}} on top of a {{mvar|Z}}). The third and fourth instructions say that, at any moment the automaton may move from state {{mvar|p}} to state {{mvar|q}}. The fifth instruction says that in state {{mvar|q}}, for each symbol {{val|1}} read, one {{mvar|A}} is popped. Finally, the sixth instruction says that the machine may move from state {{mvar|q}} to accepting state {{mvar|r}} only when the stack consists of a single {{mvar|Z}}. There seems to be no generally used representation for PDA. Here we have depicted the instruction <math>(p,a,A,q,\alpha)</math> by an edge from state {{mvar|p}} to state {{mvar|q}} labelled by <math>a; A/\alpha</math> (read {{mvar|a}}; replace {{mvar|A}} by <math>\alpha</math>). === Explanation === [[Image:Pda-steps.svg|thumb|214px|accepting computation for {{val|0011}}]] The following illustrates how the above PDA computes on different input strings. The subscript {{mvar|M}} from the step symbol <math>\vdash</math> is here omitted. {{ordered list|type=lower-alpha |1= Input string = 0011. There are various computations, depending on the moment the move from state {{mvar|p}} to state {{mvar|q}} is made. Only one of these is accepting. {{ordered list|type=lower-roman | <math>(p,0011,Z) \vdash (q,0011,Z) \vdash (r,0011,Z)</math><br/>The final state is accepting, but the input is not accepted this way as it has not been read. | <math>(p,0011,Z) \vdash (p,011,AZ) \vdash (q,011,AZ)</math><br/>No further steps possible. | <math>(p,0011,Z) \vdash (p,011,AZ) \vdash (p,11,AAZ) \vdash (q,11,AAZ) \vdash (q,1,AZ) \vdash (q,\epsilon,Z) \vdash (r,\epsilon,Z)</math><br/>Accepting computation: ends in accepting state, while complete input has been read.}} |2= Input string = 00111. Again there are various computations. None of these is accepting. {{ordered list|type=lower-roman | <math>(p,00111,Z) \vdash (q,00111,Z) \vdash (r,00111,Z)</math><br/>The final state is accepting, but the input is not accepted this way as it has not been read. | <math>(p,00111,Z) \vdash (p,0111,AZ) \vdash (q,0111,AZ)</math><br/>No further steps possible. | <math>(p,00111,Z) \vdash (p,0111,AZ) \vdash (p,111,AAZ) \vdash (q,111,AAZ) \vdash (q,11,AZ) \vdash (q,1,Z) \vdash (r,1,Z)</math><br/>The final state is accepting, but the input is not accepted this way as it has not been (completely) read.}} }} ==Context-free languages== Every [[context-free grammar]] can be transformed into an equivalent nondeterministic pushdown automaton. The derivation process of the grammar is simulated in a leftmost way. Where the grammar rewrites a nonterminal, the PDA takes the topmost nonterminal from its stack and replaces it by the right-hand part of a grammatical rule (''expand''). Where the grammar generates a terminal symbol, the PDA reads a symbol from input when it is the topmost symbol on the stack (''match''). In a sense the stack of the PDA contains the unprocessed data of the grammar, corresponding to a pre-order traversal of a derivation tree. Technically, given a context-free grammar, the PDA has a single state, 1, and its transition relation is constructed as follows. # <math>(1,\varepsilon,A,1,\alpha)</math> for each rule <math>A\to\alpha</math> (''expand'') # <math>(1,a,a,1,\varepsilon)</math> for each terminal symbol <math>a</math> (''match'') The PDA accepts by empty stack. Its initial stack symbol is the grammar's start symbol.<ref>{{Cite web |title=Pushdown Automata |url=https://www.cs.odu.edu/~zeil/cs390/f16/Public/pushdown/index.html |access-date=2024-04-07 |website=www.cs.odu.edu}}</ref> For a context-free grammar in [[Greibach normal form]], defining (1,Ξ³) β Ξ΄(1,''a'',''A'') for each grammar rule ''A'' β ''a''Ξ³ also yields an equivalent nondeterministic pushdown automaton.{{sfn|Hopcroft|Ullman|1979|p=115}} The converse, finding a grammar for a given PDA, is not that easy. The trick is to code two states of the PDA into the nonterminals of the grammar. '''Theorem.''' For each pushdown automaton <math>M</math> one may construct a context-free grammar <math>G</math> such that {{nobr|<math>N(M)=L(G)</math>.}}{{sfn|Hopcroft|Ullman|1979|p=116}} The language of strings accepted by a deterministic pushdown automaton (DPDA) is called a [[deterministic context-free language]]. Not all context-free languages are deterministic.{{efn|The set of even-length [[Palindrome#Computation theory|palindromes]] of bits can't be recognized by a deterministic PDA, but is a [[context-free language]], with the [[context-free grammar|grammar]] <math>S \rightarrow \epsilon | 0 S 0 | 1 S 1</math>.{{sfn|Hopcroft|Motwani|Ullman|2006|loc=Β§6.4.3, p. 249}}}} As a consequence, the DPDA is a strictly weaker variant of the PDA. Even for [[regular language]]s, there is a size explosion problem: for any [[General recursive function|recursive function]] <math>f</math> and for arbitrarily large integers <math>n</math>, there is a PDA of size <math>n</math> describing a regular language whose smallest DPDA has at least <math>f(n)</math> states.{{efn|This follows from the quoted [22, Proposition 7] and the stated observation that {{clarify span|any deterministic pushdown automaton can be converted into an equivalent finite automaton|reason=A finite automaton cannot be equivalent to a pushdown automaton, unless the latter doesn't actually use its stack.|date=June 2022}} of at most doubly-exponential size.<ref>{{cite book |last1=Holzer |first1=Markus |last2=Kutrib |first2=Martin |chapter=Non-Recursive Trade-Offs Are "Almost Everywhere" |title=Computing with Foresight and Industry |series=Lecture Notes in Computer Science |date=2019 |volume=11558 |pages=25β36 |doi=10.1007/978-3-030-22996-2_3|isbn=978-3-030-22995-5 }}</ref> }} For many non-regular PDAs, any equivalent DPDA would require an unbounded number of states. A finite automaton with access to two stacks is a more powerful device, equivalent in power to a [[Turing machine]].{{sfn|Hopcroft|Ullman|1979|p=171}} A [[linear bounded automaton]] is a device which is more powerful than a pushdown automaton but less so than a Turing machine.{{efn|Linear bounded automata are acceptors for the class of context-sensitive languages,{{sfn|Hopcroft|Ullman|1979|p=225}} which is a proper superclass of the context-free languages, and a proper subclass of Turing-recognizable (i.e. [[recursively enumerable]]) languages.{{sfn|Hopcroft|Ullman|1979|p=228}}}} ==Turing machines== A pushdown automaton is computationally equivalent to a "restricted" Turing Machine (TM) with two tapes which is restricted in the following manner- On the first tape, the TM can only read the input and move from left to right (it cannot make changes). On the second tape, it can only "push" and "pop" data. Or equivalently, it can read, write and move left and right with the restriction that the only action it can perform at each step is to either delete the left-most character in the string (pop) or add an extra character left to the left-most character in the string (push). That a PDA is weaker than a TM can be brought down to the fact that the procedure "pop" deletes some data. In order to make a PDA as strong as a TM, we need to save somewhere the data lost through "pop". We can achieve this by introducing a second stack. In the TM model of PDA of last paragraph, this is equivalent to a TM with 3 tapes, where the first tape is the read-only input tape, and the 2nd and the 3rd tape are the "push and pop" (stack) tapes. In order for such a PDA to simulate any given TM, we give the input of the PDA to the first tape, while keeping both the stacks empty. It then goes on to push all the input from the input tape to the first stack. When the entire input is transferred to the 1st stack, now we proceed like a normal TM, where moving right on the tape is the same as popping a symbol from the 1st stack and pushing a (possibly updated) symbol into the second stack, and moving left corresponds to popping a symbol from the 2nd stack and pushing a (possibly updated) symbol into the first stack. We hence have a PDA with 2 stacks that can simulate any TM. ==Generalization== A generalized pushdown automaton (GPDA) is a PDA that writes an entire string of some known length to the stack or removes an entire string from the stack in one step. A GPDA is formally defined as a 6-tuple: :<math>M=(Q,\ \Sigma,\ \Gamma,\ \delta, \ q_{0}, \ F)</math> where <math>Q, \Sigma\,, \Gamma\,, q_0</math>, and {{tmath|F}} are defined the same way as a PDA. :<math>\,\delta</math>: <math>Q \times \Sigma_{\epsilon} \times \Gamma^{*} \longrightarrow P( Q \times \Gamma^{*} )</math> is the transition function. Computation rules for a GPDA are the same as a PDA except that the <math>a_{i+1}</math>'s and <math>b_{i+1}</math>'s are now strings instead of symbols. GPDA's and PDA's are equivalent in that if a language is recognized by a PDA, it is also recognized by a GPDA and vice versa. One can formulate an analytic proof for the equivalence of GPDA's and PDA's using the following simulation: Let <math>\delta (q_{1}, w, x_{1} x_{2} \cdot x_{m}) \longrightarrow (q_{2}, y_{1} y_{2}...y_{n})</math> be a transition of the GPDA where <math>q_1, q_2 \in Q, w \in\Sigma_{\epsilon}, x_1, x_2,\ldots,x_m\in\Gamma^{*}, m\geq 0, y_1, y_2,\ldots, y_n\in\Gamma^{*}, n\geq 0</math>. Construct the following transitions for the PDA: :<math>\begin{array}{lcl} \delta'(q_{1}, w, x_{1}) &\longrightarrow& (p_{1}, \epsilon) \\ \delta'(p_{1}, \epsilon, x_{2}) &\longrightarrow& (p_{2}, \epsilon) \\ &\vdots& \\ \delta'(p_{m-1}, \epsilon, x_{m}) &\longrightarrow& (p_{m}, \epsilon) \\ \delta'(p_{m}, \epsilon, \epsilon ) &\longrightarrow& (p_{m+1}, y_{n}) \\ \delta'(p_{m+1}, \epsilon, \epsilon ) &\longrightarrow& (p_{m+2}, y_{n-1}) \\ &\vdots& \\ \delta'(p_{m+n-1}, \epsilon, \epsilon ) &\longrightarrow& (q_{2}, y_{1}). \end{array}</math> ==Stack automata== As a generalization of pushdown automata, Ginsburg, Greibach, and Harrison (1967) investigated '''stack automata''', which may additionally step left or right in the input string (surrounded by special endmarker symbols to prevent slipping out), and step up or down in the stack in read-only mode.<ref>{{cite journal| author=Seymour Ginsburg, Sheila A. Greibach and Michael A. Harrison| title=Stack Automata and Compiling| journal=J. ACM| year=1967| volume=14| number=1| pages=172β201| doi=10.1145/321371.321385| doi-access=free}}</ref><ref>{{cite journal| author=Seymour Ginsburg, Sheila A. Greibach and Michael A. Harrison| title=One-Way Stack Automata| journal=J. ACM| year=1967| volume=14| number=2| pages=389β418| doi=10.1145/321386.321403| doi-access=free}}</ref> A stack automaton is called ''nonerasing'' if it never pops from the stack. The class of languages accepted by nondeterministic, nonerasing stack automata is ''[[NSPACE]]''(''n''<sup>2</sup>), which is a superset of the [[context-sensitive languages#Computational properties|context-sensitive languages]].<ref name="Hopcroft.Ullman.1967">{{cite journal|author1=John E. Hopcroft |author2=Jeffrey D. Ullman | title=Nonerasing Stack Automata| journal=Journal of Computer and System Sciences| year=1967| volume=1| number=2| pages=166β186| doi=10.1016/s0022-0000(67)80013-8| doi-access=free}}</ref> The class of languages accepted by deterministic, nonerasing stack automata is ''[[DSPACE]]''(''n''β log(''n'')).<ref name="Hopcroft.Ullman.1967"/> ==Alternating pushdown automata {{anchor|Alternating}}== An '''alternating pushdown automaton''' (APDA) is a pushdown automaton with a state set * <math>Q=Q_\exists \cup Q_\forall</math> where <math>Q_\exists \cap Q_\forall=\emptyset</math>. States in <math>Q_\exists</math> and <math>Q_\forall</math> are called ''existential'' resp. ''universal''. In an existential state an APDA nondeterministically chooses the next state and accepts if ''at least one'' of the resulting computations accepts. In a universal state APDA moves to all next states and accepts if ''all'' the resulting computations accept. The model was introduced by [[Ashok K. Chandra|Chandra]], [[Dexter Kozen|Kozen]] and [[Larry Stockmeyer|Stockmeyer]].<ref name="ChandraKozen1981">{{cite journal|last1=Chandra|first1=Ashok K.|last2=Kozen|first2=Dexter C.|last3=Stockmeyer|first3=Larry J.|title=Alternation|journal=Journal of the ACM|volume=28|issue=1|year=1981|pages=114β133|issn=0004-5411|doi=10.1145/322234.322243|doi-access=free}}</ref> [[Richard E. Ladner|Ladner]], [[Richard J. Lipton|Lipton]] and [[Larry Stockmeyer|Stockmeyer]]<ref name="LadnerLipton1984">{{cite journal|last1=Ladner|first1=Richard E.|last2=Lipton|first2=Richard J.|last3=Stockmeyer|first3=Larry J.|title=Alternating Pushdown and Stack Automata|journal=SIAM Journal on Computing|volume=13|issue=1|year=1984|pages=135β155|issn=0097-5397|doi=10.1137/0213010}}</ref> proved that this model is equivalent to [[EXPTIME]] i.e. a language is accepted by some APDA [[if, and only if]], it can be decided by an exponential-time algorithm. Aizikowitz and Kaminski<ref name="AizikowitzKaminski2011">{{cite book|last1=Aizikowitz|first1=Tamar|title=Computer Science β Theory and Applications|last2=Kaminski|first2=Michael|chapter=LR(0) Conjunctive Grammars and Deterministic Synchronized Alternating Pushdown Automata|volume=6651|year=2011|pages=345β358|issn=0302-9743|doi=10.1007/978-3-642-20712-9_27|series=Lecture Notes in Computer Science|isbn=978-3-642-20711-2}}</ref> introduced ''synchronized alternating pushdown automata'' (SAPDA) that are equivalent to [[conjunctive grammar]]s in the same way as nondeterministic PDA are equivalent to context-free grammars. ==See also== * [[Context-free grammar]] * [[Counter automaton]] * [[Finite-state machine]] * [[Queue automaton]] * [[Stack machine]] ==Citations== ===Notes=== {{notelist}} ===Footnotes=== {{sfn whitelist|CITEREFHopcroftUllman1979|CITEREFHopcroftMotwaniUllman2006 }} {{reflist}} ===Works cited=== * {{Hopcroft and Ullman 1979|title-link=no|author-link=no}} * {{Hopcroft, Motwani, and Ullman 2006}} ==Further reading== * {{Sipser 1997|chapter='''2.2''': Pushdown Automata|pages=101-114}} * Jean-Michel Autebert, Jean Berstel, Luc Boasson, [http://www-igm.univ-mlv.fr/~berstel/Articles/1997CFLPDA.pdf Context-Free Languages and Push-Down Automata], in: G. Rozenberg, A. Salomaa (eds.), Handbook of Formal Languages, Vol. 1, Springer-Verlag, 1997, 111β174. ==External links== * [https://www.jflap.org JFLAP], simulator for several types of automata including nondeterministic pushdown automata * [https://www.elstel.org/coan CoAn], another simulator for several machine types including nondeterministic pushdown automata (C++, Windows, Linux, MacOS) {{Formal languages and grammars}} [[Category:Automata (computation)]] [[Category:Models of computation]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Anchor
(
edit
)
Template:Automata theory
(
edit
)
Template:Citation needed
(
edit
)
Template:Cite book
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite web
(
edit
)
Template:Efn
(
edit
)
Template:Formal languages and grammars
(
edit
)
Template:Hopcroft, Motwani, and Ullman 2006
(
edit
)
Template:Hopcroft and Ullman 1979
(
edit
)
Template:More citations needed
(
edit
)
Template:Mvar
(
edit
)
Template:Nobr
(
edit
)
Template:Notelist
(
edit
)
Template:Ordered list
(
edit
)
Template:Reflist
(
edit
)
Template:Sfn
(
edit
)
Template:Sfn whitelist
(
edit
)
Template:Short description
(
edit
)
Template:Sipser 1997
(
edit
)
Template:Tmath
(
edit
)
Template:Val
(
edit
)