3 On l'a dit, les expressions rationnelles ne permettent pas de représenter tous les langages.
7 Le langage défini par $\{ a^n b^n | n \in \mathbb{N}^* \}$ n'est pas représentable par une expression rationnelle.
11 Déterminez d'autres langages non reconnus par expression rationnelle.
15 On souhaite maintenant étudier \og une plus grande classe\fg{} de langages, et voir ce qu'il manque à nos automates pour pouvoir les associer à ces langages.\\
17 Dans l'exemple précédent, il faudrait \og noter quelque part \fg{} le nombre de $a$ rencontrés, pour s'assurer qu'il y aura bien autant de $b$. On peut imaginer y arriver avec une pile jointe à un automate non déterministe.
20 Très précisément, les automates à pile vont jouer pour les langages dits non contextuels (voir chapitre suivant) le rôle des automates finis pour les langages rationnels (: représentables par expressions rationnelles).
24 \section{Automates à pile, déteministes ou pas.}
26 \subsection{Automate à pile non déterministe}
28 \subsubsection{Définition}
30 \begin{Def}[Automate à pile]
31 Un \emph{automate à pile}\index{automate!à pile} est donné par
34 \item Un alphabet d'entrée $\Sigma$ (ensemble fini non vide),
35 \item Un ensemble d'états $E$ (fini non vide),
36 \item Un état initial $e_0 \in E$,
37 \item \'Eventuellement, une partie $A \subset E$ des états d'acceptation (pour un automate à pile dit à \emph{états d'acceptation}\index{automate!à pile!à états d'acceptation}),
38 \item Un alphabet de pile $P$ (fini, non vide),
39 \item Un symbole de pile initial $p_0$,
40 \item \'Eventuellement, un ensemble $Q \subset P$ de symboles de sommet de pile,
41 \item Enfin, une relation $t : E \times (\Sigma \cup \{ \varepsilon \} \} \times P \rightarrow E \times P^*$.
46 Le symbole de pile initial n'est pas toujours noté $p_0$.
50 \subsubsection{Transition}
52 \begin{Def}[Transition]
53 Lorsque $((e,x,p),(e',q))$ appartient au graphe de la relation $t$, on parle de la transition $(e,x,p) \longmapsto (e',q)$.
57 \noindent Elle indique que, lorsque l'automate se trouve :
59 \item dans l'état $e$,
60 \item alors que le symbole de sommet de pile est $p$,
61 \item sur l'entrée $x$,
64 \noindent alors il évolue
67 \item vers l'état $e'$,
68 \item le symbole $p$ est dépilé,
69 \item et le mot de pile $q$ (éventuellement plusieurs symboles de pile) est empilé.
74 Comme $t$ est une relation, il est possible, dans le cas d'un automate à pile non déterministe, qu'il y ait plusieurs transitions possibles dans la même situation (même état, même entrée, même symbole de sommet de pile).
76 \begin{Ex}[Automate à pile non déterministe]
77 Ici, l'alphabet d'entrée est $\{0,1\}$, le fond de pile est $T$ et alphabet de pile $\{T,Z,A\}$ :\\
80 \includegraphics[scale=0.5]{automates/automatePile2.eps}
82 Cet automate reconnaît, par pile vide, l'ensemble $$\{0^n 1^m, n \geqslant m > 0 \}$$
86 Si un automate à états finis reconnaît un mot lorsqu'il s'arrête dans un état d'acceptation, il n'en est pas de même pour les automates à pile : on verra par la suite que ceux-ci ont plusieurs critères pour décider si un mot est reconnu ou non.
88 Le critère de reconnaissance \emph{par pile vide} fait partie de ceux-ci: lorsque l'automate s'arrête avec une pile vide, le mot est accepté.
90 On remarque que les mots 01, 001, 0011 sont acceptés par cet automate. Il n'en est pas de même pour 011.
94 \subsection{Automate à pile déterministe}
96 \subsubsection{Définition}
97 \begin{Def}[Automate à pile déterministe]
98 Dans le cas d'un \emph{automate à pile déterministe}\index{automate!à pile!déterministe}, $t$ est une fonction sur son domaine de définition, et $(e',q) = t(e,x,p)$.
102 En particulier si $t$ est définie pour le triplet $(e,x,p)$, $t(e,x,p)$ est unique.
106 \begin{Ex}[Automate à pile déterministe]
107 Ici, l'alphabet d'entrée est $\{0,1\}$, le fond de pile est $Z$ et alphabet de pile $\{Z,A\}$ :\\
109 \includegraphics[scale=0.5]{automates/automatePile3.eps}
114 Cet automate à pile déterministe reconnaît, par état final, le même langage que l'exemple précédent.
117 \subsubsection{Transitions}
119 Il est fondamental de comprendre qu'une transition d'un automate à pile, quelle qu'elle soit, exige toujours de dépiler un symbole de pile.\\
123 Autrement dit, si la pile vient à se vider, l'automate se bloque et ne peut plus évoluer, même si le mot d'entrée n'a pas été entièrement lu.
125 Ceci explique le \og symbole de pile initial\fg{} , la plupart du temps sans intérêt autre que celui de permettre le début du calcul dans l'automate.
130 On admet des \og transitions vides\fg{} , du type $(e,\varepsilon,p) \longmapsto \hdots)$, qui permettent de ne pas avancer sur le mot d'entrée, par exemple pour vider la pile. Il faut les utiliser avec précautions.
134 \section{Calcul dans un automate à pile}
136 \subsection{Encore quelques définitions...}
138 \begin{Def}[Configuration]
139 On appelle \emph{configuration d'un automate à pile}\index{automate!à pile! configuration} un triplet $(e,w,q)$ où
141 \item $e$ est l'état dans lequel se trouve l'automate à l'instant considéré,
142 \item $w$ est le mot à lire,
143 \item $q$ est le mot de pile (en tête, le symbole de sommet de pile, en queue, le symbole de fond de pile).
148 \begin{Def}[Dérivation valide]
151 \item $q$ est de la forme $pq'$ où $p$ est le symbole de sommet de pile,
152 \item $w$ est de la forme $xw'$, où $x$ est un symbole d'entrée,
153 \item il existe une transition $(e,x,p) \longmapsto (e',q'')$,
155 alors, après application de cette transition, la nouvelle configuration de l'automate est $(e',w',q'' q')$ et la correspondance $(e,w,q) \vdash (e',w',q'' q')$ est appelée une \emph{dérivation valide dans l'automate}\index{automate!à pile!dérivation valide}.
159 \begin{Def}[Calcul valide]
160 Un \emph{calcul valide}\index{automate!à pile!calcul valide} dans l'automate est une famille de dérivations $(e_1,w_1,q_1) \vdash (e_2,w_2,q_2) \vdash \hdots \vdash (e_n,w_n,q_n) $.
163 On dit que ce calcul valide mène de la configuration $(e_1,w_1,q_1) $ à la configuration $ (e_n,w_n,q_n) $
169 On peut noter cela : $(e_1,w_1,q_1) \stackrel{*}{\vdash} (e_n,w_n,q_n) $.
173 \begin{Def}[Mot reconnu]
174 On dit qu'un mot $w$ est \emph{reconnu}\index{automate!à pile!mot reconnu} par un automate à pile (état initial $e_0$, symbole de pile initial $p_0$) lorsqu'il existe un calcul valide $$(e_0,w,q_0) \stackrel{*}{\vdash} (e,\varepsilon,q) $$ tel que, au choix
177 \item $e$ est un état d'acceptation : le mot $w$ est dit \emph{reconnu par l'état d'acceptation}\index{mot reconnu!par état d'acceptation},
178 \item $q$ est de la forme $q_sq'$ où $q_s \in Q$ : le mot $w$ est dit \emph{reconnu par symbole de sommet de pile}\index{mot reconnu!par symbole de sommet de pile},
179 \item $q = \varepsilon$ (symbole de pile vide) : le mot $w$ est dit \emph{reconnu par pile vide}\index{mot reconnu!par pile vide},
184 On peut envisager des reconnaissances par combinaison de deux de ces conditions, voire les trois simultanément.
188 \noindent On démontre que...
191 Tous ces types de reconnaissance peuvent se ramener à la seule reconnaissance par pile vide (éventuellement avec un automate beaucoup plus compliqué ).
195 \noindent C'est pourquoi nous n'envisagerons plus que cette dernière dans la suite. Enfin,
197 \begin{Def}[Langage reconnu]
198 Le \emph{langage reconnu}\index{automate!à pile!langage reconnu} par automate est l'ensemble des mots reconnus par cet automate (par le même mode de reconnaissance).
201 \subsection{Premiers exemples}
204 Automate à pile (non déterministe) reconnaissant, par pile vide, l'ensemble des mots de la forme $ww^t$, concaténation de $w$ (constitué de 0 et de 1) et de son image miroir :\\
207 \includegraphics[scale=0.5]{automates/automatePile4.eps}
210 \noindent (Alphabet d'entrée $\{0,1\}$, fond de pile $Z$, alphabet de pile $\{Z,A,B\}$.)
216 Automate à pile reconnaissant, par pile vide, l'ensemble des mots de la forme $wcw^t$, concaténation de $w$ (constitué de 0 et de 1) et de son image miroir séparés par le caractère $c$ :\\
219 \includegraphics[scale=0.5]{automates/automatePile1.eps}
221 \noindent (Alphabet d'entrée $\{0,1,c\}$, fond de pile $Z$, alphabet de pile $\{Z,A,B\}$.)
225 \subsection{Exemple plus complet : le langage $\{0^n 1^n | n \in \mathbb{N}^* \}$}
227 \noindent Le principe est le suivant :
230 \item Tant qu'on lit des 0, on les empile, sans changer d'état,
231 \item Au premier 1 rencontré, on change d'état (pour ne plus accepter de 0),
232 \item On dépile alors un à un les symboles de pile (sans jamais rien empiler),
233 \item Si le mot se vide en même temps que la pile, il comportait autant de 0 que de 1.
238 \noindent Voici les transformations :
241 \item $(e_0,0,p_0) \rightarrow (e_0,0)$
242 \item $(e_0,0,0) \rightarrow (e_0,00)$
243 \item $(e_0,1,0) \rightarrow (e_1,\varepsilon)$
244 \item $(e_1,1,0) \rightarrow (e_1,\varepsilon)$
248 Représentez cet automate.
252 \section{Construction d'un automate à pile}
254 \subsection{Introduction à la méthode}
255 On peut évidemment utiliser la méthode \og directe\fg, comme dans l'exemple précédent.\\
258 Pour les langages plus complexes, il peut être nécessaire d'avoir recours à un algorithme. Nous l'aborderons par l'exemple de la grammaire écrite pour les expressions algébriques élémentaires :
261 <expression> & ::= & <terme>\\
263 & ::= & <terme> ~ '+' ~ <expression>\\
265 <terme> &::=& <facteur>\\
267 &::=& <facteur> ~ '*' ~ <terme>\\
269 <facteur> &::=& ~ '(' ~ <expression> ~')'\\
274 \noindent en omettant la définition du SNT \og variable\fg{}, inutile ici.\\
276 \subsection{Utilisation d'un symbolisme}
278 On introduit un nouveau symbolisme (développé dans la suite) pour cette même grammaire ; il se comprend aisément :
293 \noindent ...en admettant comme symboles de variables les caractères alphabétiques minuscules.\\
296 \subsection{Algorithme de construction}
298 Le principe est de construire un automate à pile non déterministe qui admet des transitions vides :
301 \item Au départ, sur une transition vide, on empile le SNT de l'axiome de la grammaire (ici, E) : \emph{c.f.} transition (1).
302 % \item Quelle que soit l'entrée qui se présente,
304 % \item Si c'est un SNT qui figure en sommet de pile, on crée une transition vide qui le remplace par les symboles de sa définition,
305 % \item Lorsque c'est un ST qui est au sommet de la pile, on le compare avec le symbole qui figure en entrée et, s'il est bon, on se contente de le dépiler.
307 \item associer à chaque règle non terminale une $\epsilon$-transition qui empile les symboles de la partie droite (\emph{c.f.} transitions (2) à (6))
308 \item associer à chaque règle terminale $A \rightarrow x$ une transition $(e_0,x,A) \mapsto (e_0,\epsilon)$ (\emph{c.f.}. transitions (7) et (8))
309 \item associer à chaque symbole terminal une transition qui reconnaît ce symbole et dépile ce caractère (\emph{c.f.} transitions (9) à (12))
315 On obtient les transitions suivantes :
318 (1) & (e_0,\varepsilon,p_0) &\longmapsto &(e_0,E)\\
319 (2) & (e_0,\varepsilon,E) &\longmapsto &(e_0,T)\\
320 (3) & (e_0,\varepsilon,E) &\longmapsto &(e_0,T+E)\\
321 (4) & (e_0,\varepsilon,T) &\longmapsto &(e_0,F)\\
322 (5) & (e_0,\varepsilon,T) &\longmapsto &(e_0,F*T)\\
323 (6) & (e_0,\varepsilon,F) &\longmapsto &(e_0,(E))\\
324 (7) & (e_0,a,F) &\longmapsto &(e_0,\varepsilon)\\
325 \vdots & \vdots & \vdots & \vdots \\
326 (8) & (e_0,z,F) &\longmapsto &(e_0,\varepsilon)\\
327 (9) & (e_0,+,+) &\longmapsto &(e_0,\varepsilon)\\
328 (10) & (e_0,*,*) &\longmapsto & (e_0,\varepsilon)\\
329 (11) & (e_0,(,() &\longmapsto & (e_0,\varepsilon)\\
330 (12) & (e_0,),)) &\longmapsto & (e_0,\varepsilon)\\
335 \subsection{Exercices}
338 Soit l'automate à pile défini par $\Sigma=\{a,b\}$, $E=\{q_0,q_1,q_2\}$, $P=\{p_, A\}$ et les transitions suivantes
341 (q_0,a,p_0) & \mapsto& (q_1,A) \\
342 (q_1,b,A) & \mapsto& (q_2,\epsilon) \\
343 (q_1,a,p) & \mapsto& (q_1,Ap)\\
344 (q_2,b,A) & \mapsto& (q_2,\epsilon) \\
347 \item Donner les enchaînements des transitions permettant d'accepter $aabb$ en précisant s'il y a des points de non déterminisme dans la dérivation.
348 \item Donner l'enchanement des transitions conduisant à l'échec de l'acceptation de la chaîne $aaba$.
349 \item Décrire l'état de l'automate après avoir lu $n$ symboles $a$ en entrée $(n \in \mathbb{N})$. Quelle est alors la seule façon de vider la pile~? En déduire le langage reconnu par cet automate à pile avec arrêt sur pile vide.
356 Pour $u \in \Sigma^*$ , on note $|u|_a$ le nombre de $a$ dans $u$ et $|u|_b$ le nombre de $b$ dans $u$.
358 Donner un automate à pile qui reconnaît $L = \{u \in \Sigma^*, |u|_a = |u|_b \}$.
363 Soit $\Sigma = \{0, 1\}$. Donner un automate à pile qui accepte un mot $u \in \Sigma^*$ ssi aucun préfixe de $u$ ne contient plus de 1 que de 0. Préciser si l’automate est déterministe.
368 Soit $\Sigma = \{1, 2\}$. Donner un automate à pile qui reconnaît le langage suivant : $$\{1^n 2^n | n \geqslant 0\}\cup \{1^n 2^{2n} | n \geqslant 0\}$$
369 Préciser si l’automate est déterministe.
373 Soit $\Sigma = \{a, b, c\}$. Donner un automate à pile qui reconnaît le langage suivant : $$\{a^i b^j c^k | i = j \textrm{ ou } j = k\}$$
374 Préciser si l’automate est déterministe.
378 Soit $G$ la grammaire suivante :
379 $$S \rightarrow aAB ~~~ A \rightarrow aAB | a ~~~ B \rightarrow bBA | aC ~~~ C \rightarrow BaA.$$
381 \item Donner des exemples de mots reconnus.
382 \item Donner un automate à pile qui reconnaît le langage généré par la grammaire $G$.
388 Soit $G$ la grammaire suivante :
389 $$S \rightarrow aAB ~~~ A \rightarrow aAB | a ~~~ B \rightarrow bBA | aC | b ~~~ C \rightarrow BaA.$$
390 Donner un automate à pile qui reconnaît le langage généré par la grammaire $G$.
395 \centerline{\x{Fin du Chapitre}}