Stapelautomaat

Een stapelautomaat

Een stapelautomaat, ofwel een push-down-automaat (PDA), is een eindige automaat die gebruikmaakt van een stack. De klasse van formele talen die door stapelautomaten wordt geaccepteerd, is de klasse van contextvrije talen. Dat wil zeggen dat stapelautomaten even krachtig zijn als contextvrije grammatica's.

Formele Definitie

Formeel is een PDA een automaat M {\displaystyle M} met

M = ( Q , Σ , Γ , δ , q 0 , F )   {\displaystyle M=(Q,\Sigma ,\Gamma ,\delta ,q_{0},F)\ }

met

Q   {\displaystyle Q\ } een eindige verzameling toestanden
Σ   {\displaystyle \Sigma \ } een eindige verzameling symbolen, het alfabet van de automaat geheten
Γ   {\displaystyle \Gamma \ } een eindige verzameling symbolen, het alfabet van de stack
δ {\displaystyle \,\delta } : Q × Σ ϵ × Γ ϵ P ( Q × Γ ϵ ) {\displaystyle Q\times \Sigma _{\epsilon }\times \Gamma _{\epsilon }\longrightarrow {\mathcal {P}}(Q\times \Gamma _{\epsilon })} een transitiefunctie
q 0   {\displaystyle q_{0}\ } de begintoestand
F Q {\displaystyle F\subseteq Q} de verzameling accepterende toestanden

waarbij Σ ϵ = Σ { ϵ } {\displaystyle \Sigma _{\epsilon }=\Sigma \cup \{\epsilon \}} en Γ ϵ = Γ { ϵ } {\displaystyle \Gamma _{\epsilon }=\Gamma \cup \{\epsilon \}} .

Een stapelautomaat accepteert een woord w, als w geschreven kan worden als w 1 w 2 w n {\displaystyle w_{1}w_{2}\ldots w_{n}} , waarbij w i Σ ϵ {\displaystyle w_{i}\in \Sigma _{\epsilon }} , als er een rij r 0 , , r n {\displaystyle r_{0},\ldots ,r_{n}} van toestanden en een rij s 0 , , s n {\displaystyle s_{0},\ldots ,s_{n}} van stapelinhouden ( s i Γ {\displaystyle s_{i}\in \Gamma ^{*}} ) zijn, zo dat

  • r 0 = q 0 {\displaystyle r_{0}=q_{0}} en s 0 = ϵ {\displaystyle s_{0}=\epsilon } ;
  • voor alle 0 i n 1 {\displaystyle 0\leq i\leq n-1} geldt: ( r i + 1 , β ) δ ( r i , w i + 1 , α ) {\displaystyle (r_{i+1},\beta )\in \delta (r_{i},w_{i+1},\alpha )} , waarbij s i = α ω {\displaystyle s_{i}=\alpha \omega } en s i + 1 = β ω {\displaystyle s_{i+1}=\beta \omega } voor een ω Γ {\displaystyle \omega \in \Gamma ^{*}} ;
  • r n F {\displaystyle r_{n}\in F} .

De taal van een stapelautomaat M {\displaystyle M} , genoteerd als L ( M ) {\displaystyle L(M)} , is de verzameling van alle woorden die door M {\displaystyle M} geaccepteerd worden.

Voorbeeld

De stapelautomaat M = ( { q 0 , q a , q b , q f } , { a , b } , { S , 1 } , δ , q 0 , { q f } ) {\displaystyle M=(\{q_{0},q_{a},q_{b},q_{f}\},\{a,b\},\{S,1\},\delta ,q_{0},\{q_{f}\})} met

  • δ ( q 0 , a , ϵ ) = { ( q a , 1 ) } {\displaystyle \delta (q_{0},a,\epsilon )=\{(q_{a},1)\}}
  • δ ( q a , a , ϵ ) = { ( q a , 1 ) } {\displaystyle \delta (q_{a},a,\epsilon )=\{(q_{a},1)\}}
  • δ ( q a , b , 1 ) = { ( q b , ϵ ) } {\displaystyle \delta (q_{a},b,1)=\{(q_{b},\epsilon )\}}
  • δ ( q b , b , 1 ) = { ( q b , ϵ ) , ( q f , ϵ ) } {\displaystyle \delta (q_{b},b,1)=\{(q_{b},\epsilon ),(q_{f},\epsilon )\}}
  • δ ( q , x , y ) = {\displaystyle \delta (q,x,y)=\emptyset } voor alle andere combinaties van q Q {\displaystyle q\in Q} , x Σ ϵ {\displaystyle x\in \Sigma _{\epsilon }} en y Γ ϵ {\displaystyle y\in \Gamma _{\epsilon }}

accepteert de contextvrije taal { a n b n n 1 } {\displaystyle \{a^{n}b^{n}\mid n\geq 1\}} .

Voor het woord w = a a b b {\displaystyle w=aabb} hebben we bijvoorbeeld:

  • r 0 = q 0 , s 0 = ϵ {\displaystyle r_{0}=q_{0},s_{0}=\epsilon }
  • r 1 = q a , s 1 = 1 {\displaystyle r_{1}=q_{a},s_{1}=1} (want w 1 = a {\displaystyle w_{1}=a} en ( q a , 1 ) δ ( q 0 , a , ϵ ) {\displaystyle (q_{a},1)\in \delta (q_{0},a,\epsilon )} )
  • r 2 = q a , s 2 = 11 {\displaystyle r_{2}=q_{a},s_{2}=11} (want w 2 = a {\displaystyle w_{2}=a} en ( q a , 1 ) δ ( q a , a , ϵ ) {\displaystyle (q_{a},1)\in \delta (q_{a},a,\epsilon )} )
  • r 3 = q b , s 3 = 1 {\displaystyle r_{3}=q_{b},s_{3}=1} (want w 3 = b {\displaystyle w_{3}=b} en ( q b , ϵ ) δ ( q a , b , 1 ) {\displaystyle (q_{b},\epsilon )\in \delta (q_{a},b,1)} )
  • r 4 = q f , s 4 = ϵ {\displaystyle r_{4}=q_{f},s_{4}=\epsilon } (want w 4 = b {\displaystyle w_{4}=b} en ( q f , ϵ ) δ ( q b , b , 1 ) {\displaystyle (q_{f},\epsilon )\in \delta (q_{b},b,1)} )
  • het woord wordt geaccepteerd omdat q f F {\displaystyle q_{f}\in F} .
Bronnen, noten en/of referenties
  • (en) Michael Sipser, Introduction to the Theory of Computation, Second edition, Internation edition, Cengage Learning, 2006, ISBN 978-0-619-21764-8