6 Dans la définition de la syntaxe d'un langage de programmation, par exemple, on rencontre souvent des définitions telles que celle d'un identificateur :
8 \og Un identificateur est un identificateur de symbole ou un identificateur de variable ; un identificateur de symbole commence par deux caractères alphabétiques, suivi par un nombre quelconque, éventuellement nul, de chiffres, suivis, etc.\fg{} \\
10 Il s'agit ici d'introduire des abréviations pour ce type d'expressions ; ces abréviations conduisent à la notion d'expression rationnelle.
13 L'expression rationnelle $a(a|b)^*$ signifie : un caractère $a$, suivi d'un nombre quelconque, éventuellement nul, de caractères choisis dans l'ensemble $\{a,b\}$.
17 Un langage est évidemment associé à une expression rationnelle. On notera $\mathcal{L}(r)$ le langage associé à l'expression rationnelle $r$.
20 Quel est le langage décrit par l'expression rationnelle $\alpha = (ab^*)^*$ ?
22 L'expression $\beta = a(a|b)^*$ est-elle équivalente à $\alpha$ ?
24 Trouvez une expression équivalente à $\alpha$ dans laquelle il n'y a qu'une $*$.
27 \noindent \emph{\underline{Réponse : }} $\varepsilon \in L_\alpha \setminus L_\beta$ ; expression équivalente : $(\varepsilon|a(a|b)^*)$.\\
30 Définissons dorénavant plus rigoureusement cela, rentrons dans les détails...
32 \section{Règles de définition}
34 Voici les règles qui permettent de définir les expressions rationnelles sur un alphabet $\Sigma$ :\\
37 \item $\varepsilon$ est une expression rationnelle qui dénote $\{$ \og \fg{} $\}$ (l'ensemble constitué de la chaîne vide).
38 \item Si $r$ et $s$ dénotent les langages $\mathcal{L}(r)$ et $\mathcal{L}(s)$, alors
41 \item $(r)|(s)$ désigne le langage $\mathcal{L}(r) \cup \mathcal{L}(s)$ (\emph{i.e.} le langage obtenu par réunion des deux langages $\mathcal{L}(r)$ et $\mathcal{L}(s)$).
42 \item $(r)(s)$ désigne le langage $\mathcal{L}(r) \mathcal{L}(s)$ (\emph{i.e.} le langage obtenu en concaténant, de toutes les manières possibles, un mot du langage $\mathcal{L}(r)$ et un mot du langage $\mathcal{L}(s)$).
43 \item $(r)^*$ désigne le langage $\left( \mathcal{L}(r) \right)^*$ (\emph{i.e.} le langage constitué de la chaîne vide, des mots de $\mathcal{L}(r)$ et des mots obtenus en concaténant un nombre quelconque (au moins deux) de mots de $\mathcal{L}(r)$).
44 \item $(r)$ désigne le langage $\mathcal{L}(r)$.
50 Décrire, sur l'alphabet \{ Acquérir, Sortir, Rentrer, Vendre, Archiver \}, la vie d'un document dans une bibliothèque.
54 \noindent \emph{\underline{Réponse : }} Acquérir (Sortir Rentrer )* (Sortir | Vendre | Archiver).
57 \'Ecrire, en syntaxe BNF, la grammaire algébrique de toutes les expressions rationnelles sur $\Sigma$.
61 \noindent \emph{\underline{Réponse : }} \\
63 $<$ expression $>$ & ::= & $<$ primitive $>$\\
64 & ::= & $<$ parenthèse $>$\\
65 & ::= & $<$ concaténation $>$\\
66 & ::= & $<$ étoile $>$\\
67 $<$ primitive $>$ & ::= & $\varepsilon$\\
68 & ::= & $x$ (avec $x \in \Sigma$)\\
69 $<$ parenthèse $>$ & ::= & '(' $<$ expression $>$ $|$ $<$ expression $>$ $<$ suite $>$ ')'\\
70 $<$ suite $>$ & ::= & $<$ expression $>$ $<$ suite $>$\\
72 $<$ concaténation $>$ & ::= & $<$ expression $>$ $<$ expression $>$\\
73 $<$ étoile $>$ & ::= & $<$ primitive $>$ '*'\\
74 & ::= & $<$ parenthèse $>$ '*'\\
75 & ::= & $<$ concaténation $>$ '*'\\
80 On peut réduire le nombre de paires de parenthèses écrites, en adoptant les règles de priorité suivantes :
83 \item La répétition est prioritaire sur tout autre opérateur.
85 Autrement dit $ab^*$ est $a|b^*$ doivent être interprétés (respectivement) par $a(b)^*$ et $a|(b^*)$.
87 \item La concaténation est prioritaire sur l'alternative.
89 $rs|tu$ doit donc être interprété comme $(rs)|(tu)$.
94 De plus, on admettra l'écriture $a^n$ pour le mot $aaa \hdots aa$ ($n$ fois).
99 Soit l'alphabet $\Gamma = \{+,\times,a,b,c\}$. Repérer les expressions rationnelles sur $\Gamma$ parmi les suites de symboles suivantes :
101 \item $(a|+)^*+b\times c*$,
102 \item $+^*|^*\times^*$,
103 \item $((a+)^*|)b^*c$,
104 \item $((a^*b)^*\times |ca+^*)$.
109 \noindent \emph{\underline{Réponse : }} Seules la première et la dernière suite de symboles sont des expressions rationnelles.
112 \section{Propriétés des opérateurs}
117 Les propriétés de ces opérateurs sont les suivants :
120 \item Associativité : $r|(s|t) = (r|s)|t$ et $r(st) = (rs)t$.
121 \item Commutativité de l'alternative : $r | s = s | r$.
122 \item Distributivité de l'alternative sur la concaténation : $r(s|t) = rs|rt$ et $(r|s)t = rt|st$.
123 \item $\epsilon$ est élément neutre pour la concaténation.
124 \item La répétition est idempotente : $r^{**}=r^*$.
130 Quel est le langage sur $\{a,b\}$ décrit par l'expression rationnelle : $b^*a(b^*ab^*a)^*b^*$ ? En trouver une \og meilleure \fg{} expression.
134 \noindent \emph{\underline{Réponse : }} L'ensemble des mots sur $\{a,b\}$ contenant un nombre impair de $a$. $b^* a(b|ab^*a)^*$.
136 \section{De nouvelles abréviations}
138 D'autres abréviations peuvent être introduites :
141 \item L'opérateur de fermeture positive : $a^+$ désigne \og au moins une instance de\fg{} (\emph{i.e.} $a^+ = a a^*$
142 \item L'opérateur ? qui signifie \og zéro ou une occurence de\fg{} (\emph{i.e.} $a? = a|\epsilon$).
143 \item Classes de caractères : la notation $[abc]$ est une autre notation pour $a|b|c$, sans intéret, sauf dans le cas de $[a-z] = a|b|\hdots |z$.
147 On peut représenter \og une lettre, suivie d'un nombre quelconque, éventuellement nul, de lettres ou de chiffres\fg{} par $[a-zA-Z][a-zA-Z0-9]^*$.
150 \section{Universalité des expressions rationnelles}
152 Les expressions rationnelles ne sont pas universelles, et ne permettent pas de décrire tous les langages.
155 Il est impossible de décrire, à l'aide d'expression rationnelles, le langage défini par
156 $$\{ wcw | w \text{ est une chaîne de a et de b} \}$$
159 En effet, \og une chaîne de $a$ ou de $b$\fg{} peut s'exprimer par l'expression rationnelle $(a|b)^*$.
161 Mais, si l'on écrit ensuite $(a|b)^* c (a|b)^*$, la syntaxe des expressions rationnelles ne permet pas de préciser que les chaînes qui précèdent et suivent le $c$ sont identiques.
165 \centerline{\x{Fin du Chapitre}}