Considérons l'alphabet \( \Sigma=\{a, b, c\}\) et déterminons un automate reconnaissant la REGEX \( (a+b)c^*\) .
Le parenthèsage permet d'identifier la priorité des calculs. Il nous faut donc
- Déterminer un automate reconnaissant \( a\)
- Déterminer un automate reconnaissant \( b\)
- En déduire un automate reconnaissant la somme \( a+b\)
- Déterminer un automate reconnaissant \( c\)
- En déduire un automate reconnaissant l'étoile \( c^*\)
- Finalement, en déduire un automate reconnaissant le concaténé \( (a+b)c^*\)
Pour les caractères nous pouvons utiliser la condition 3 :
On note \( \A\) l'automate
\[
\xymatrix{
\ar[r]&A\ar[rd]_{b, c}\ar[rr]^{a}&&B\ar[ld]^{a, b, c}\ar[r]&\\
&&C\ar@(ld, rd)[]_{a, b, c}&&
}
\]
\[
\begin{array}{c|ccc}
&a&b&c\\\hline
\rightarrow A&B&C&C\\
B \rightarrow&C&C&C\\
C&C&C&C
\end{array}
\]
On note \( \mathscr{B}\) l'automate
\[
\xymatrix{
\ar[r]&A\ar[rd]_{a, c}\ar[rr]^{b}&&B\ar[ld]^{a, b, c}\ar[r]&\\
&&C\ar@(ld, rd)[]_{a, b, c}&&
}
\]
\[
\begin{array}{c|ccc}
&a&b&c\\\hline
\rightarrow A&C&B&C\\
B \rightarrow&C&C&C\\
C&C&C&C
\end{array}
\]
On note \( \mathscr{C}\) l'automate
\[
\xymatrix{
\ar[r]&A\ar[rd]_{a, b}\ar[rr]^{c}&&B\ar[ld]^{a, b, c}\ar[r]&\\
&&C\ar@(ld, rd)[]_{a, b, c}&&
}
\]
\[
\begin{array}{c|ccc}
&a&b&c\\\hline
\rightarrow A&C&C&B\\
B \rightarrow&C&C&C\\
C&C&C&C
\end{array}
\]
Nous pouvons alors réaliser la somme \( \A+\mathscr{B}\) en utilisant les outils développés à la condition 4.
\[
\begin{array}{c|ccc}
& a&b&c\\\hline
\rightarrow (A, A)& (B, C)& (C, B)& (C, C)\\
(A, B) \rightarrow & (B, C)& (C, C)& (C, C)\\
(A, C)& (B, C)& (C, C)& (C, C)\\
(B, A)\rightarrow & (C, C)& (C, B)& (C, C)\\
(B, B)\rightarrow & (C, C)& (C, C)& (C, C)\\
(B, C)\rightarrow & (C, C)& (C, C)& (C, C)\\
(C, A)& (C, C)& (C, B)& (C, C)\\
(C, B)\rightarrow & (C, C)& (C, C)& (C, C)\\
(C, C)& (C, C)& (C, C)& (C, C)\\
\end{array}
\]
\[
\xymatrix@C=1.719cm@R=0.519cm{
&&& (A, B)\ar[ld]_{a}\ar[dd]^{b, c}\ar[r]&&&\\
&& (B, C)\ar[lu]\ar[rd]^{a, b, c}&& (A, C)\ar@/_5pc/[ll]_{a}\ar[ld]_{b, c}&&\\
\ar[r]& (A, A)\ar[ru]^{a}\ar[rd]^{b}\ar[rr]^{c}&& (C, C)\ar@(d, dl)[]^{a, b, c}&& (B, B)\ar[ll]_{a, b, c}\ar[r]&\\
&& (C, B)\ar[ld]\ar[ru]_{a, b, c}&& (C, A)\ar[lu]_{a, c}\ar@/^5pc/[ll]^{b}&&\\
&&& (B, A)\ar[uu]_{a, c}\ar[lu]_{b}\ar[r]&&&
}
\]
On à présent l'automate \( \mathscr{C}^*\) en utilisant la construction \( 6\) .
\[
\xymatrix{
\ar[r]&A\ar[d]\ar[rd]_{a, b}\ar[rr]^{c}&&B\ar[ld]^{a, b, c}\ar@/_2pc/[ll]_{\varepsilon}&\\
&&C\ar@(ld, rd)[]_{a, b, c}&&
}
\]
de matrice
\[
\begin{array}{c|cccc}
&a&b&c&\varepsilon\\\hline
\rightarrow A\rightarrow&C&C&B&\\
B &C&C&C&A\\
C&C&C&C&
\end{array}
\]
d'\( \varepsilon\) -libéré
\[
\begin{array}{c|ccc}
&a&b&c\\\hline
\rightarrow A\rightarrow&C&C&B\\
B \rightarrow &C&C&B, C\\
C&C&C&C
\end{array}
\]
d'automate déterministe associé
\[
\begin{array}{c|ccc}
&a&b&c\\\hline
\rightarrow \{A\}\rightarrow &\{C\}&\{C\}&\{B\}\\
\{B\} \rightarrow&\{C\}&\{C\}&\{B, C\}\\
\{C\}&\{C\}&\{C\}&\{C\}\\
\{B, C\}\rightarrow&\{C\}&\{C\}&\{B, C\}
\end{array}
\]
En renommant les sommets, on arrive à l'automate
\[
\begin{array}{c|ccc}
&a&b&c\\\hline
\rightarrow X\rightarrow &Z&Z&Y\\
Y \rightarrow&Z&Z&T\\
Z&Z&Z&Z\\
T\rightarrow&Z&Z&T
\end{array}
\]
\[
\xymatrix{
&&&\\
\ar[r]
&X\ar[u]\ar[r]^{a, b}\ar[rd]_{c}&Z\ar@(ru, rd)[]^{a, b, c}&\\
& &Y\ar[l]\ar[u]_{a, b}\ar[d]^{c}&\\
& &T\ar[r]\ar@/_2.19pc/[uu]_{a, b}\ar@(ld, rd)[]_c&
}
\]
Finalement, on concatène l'automate \( \A+\mathscr{B}\) et \( \mathscr{C}^*\) par des \( \varepsilon\) -transition :
\[
\xymatrix{
&&& (A, B)\ar[ld]_{a}\ar[dd]^{b, c}\ar@/^1.19pc/@*{[red]}[rrrdr]^{\color{red}\varepsilon}&&&&&&\\
&& (B, C)\ar@*{[red]}@/^6pc/[rrrrr]^{\color{red}\varepsilon}\ar[rd]^{a, b, c}&& (A, C)\ar@/_5pc/[ll]_{a}\ar[ld]_{b, c}&&&X\ar[r]^{a, b}\ar[rd]_c\ar[u]&Z\ar@(ru, rd)[]^{a, b, c}&\\
\ar[r]& (A, A)\ar[ru]^{a}\ar[rd]^{b}\ar[rr]^{c}&& (C, C)\ar@(d, dl)[]^{a, b, c}&& (B, B)\ar[ll]_{a, b, c}\ar@*{[red]}[rru]^{\color{red}\varepsilon}&&&Y\ar[l]\ar[u]_{a, b}\ar[d]^{c}&\\
&& (C, B)\ar@*{[red]}@/_9pc/[rrrrruu]_{\color{red}\varepsilon}\ar[ru]_{a, b, c}&& (C, A)\ar[lu]_{a, c}\ar@/^5pc/[ll]^{b}&&&&T\ar[r]\ar@/_2.19pc/[uu]_{a, b}\ar@(ld, rd)[]_c&\\
&&& (B, A)\ar[uu]_{a, c}\ar[lu]_{b}\ar@/_3.19pc/@*{[red]}[rrruuur]^{\color{red}\varepsilon}&&&&&&
}
\]
Sa matrice est
\[
\begin{array}{c|cccc}
& a&b&c&\varepsilon\\\hline
\rightarrow (A, A)& (B, C)& (C, B)& (C, C)&\\
(A, B) & (B, C)& (C, C)& (C, C)&X\\
(A, C)& (B, C)& (C, C)& (C, C)&\\
(B, A) & (C, C)& (C, B)& (C, C)&X\\
(B, B) & (C, C)& (C, C)& (C, C)&X\\
(B, C)& (C, C)& (C, C)& (C, C)&X\\
(C, A)& (C, C)& (C, B)& (C, C)&\\
(C, B) & (C, C)& (C, C)& (C, C)&X\\
(C, C)& (C, C)& (C, C)& (C, C)&\\\
X\rightarrow &Z&Z&Y&\\
Y \rightarrow&Z&Z&T&\\
Z&Z&Z&Z&\\
T\rightarrow&Z&Z&T&
\end{array}
\]
L'\( \varepsilon\) -libéré est (on note simplement \( AB\) au lieu de \( (A, B)\) pour alléger les notations)
\[
\begin{array}{c|ccc}
& a&b&c\\\hline
\rightarrow AA&BC&CB&CC\\
AB \rightarrow &BC, Z&CC, Z&CC, Y\\
AC&BC&CC&CC\\
BA \rightarrow &CC, Z&CB, Z&CC, Y\\
BB \rightarrow &CC, Z&CC, Z&CC, Y\\
BC\rightarrow &CC, Z&CC, Z&CC, Y\\
CA&CC&CB&CC\\
CB \rightarrow &CC, Z&CC, Z&CC, Y\\
CC&CC&CC&CC\\\
X\rightarrow &Z&Z&Y\\
Y \rightarrow&Z&Z&T\\
Z&Z&Z&Z\\
T\rightarrow&Z&Z&T
\end{array}
\]
Finalement l'automate déterministe est
\[
\begin{array}{c|ccc}
& a&b&c\\\hline
\rightarrow \{AA\}&\{BC\}&\{CB\}&\{CC\}\\
\{BC\}\rightarrow &\{CC, Z\}&\{CC, Z\}&\{CC, Y\}\\
\{CB\}\rightarrow &\{CC, Z\}&\{CC, Z\}&\{CC, Y\}\\
\{CC\}&\{CC\}&\{CC\}&\{CC\}\\
\{CC, Z\}&\{CC, Z\}&\{CC, Z\}&\{CC, Z\}\\
\{CC, Y\}\rightarrow &\{CC, Z\}&\{CC, Z\}&\{CC, T\}\\
\{CC, T\}\rightarrow &\{CC, Z\}&\{CC, Z\}&\{CC, T\}
\end{array}
\]
En renommant les sommets, on arrive à
\[
\begin{array}{c|ccc}
& a&b&c\\\hline
\rightarrow A&B&C&D\\
B\rightarrow &E&E&F\\
C\rightarrow &E&E&F\\
D&D&D&D\\
E&E&E&E\\
F\rightarrow &E&E&G\\
G\rightarrow &E&E&G
\end{array}
\]
\[
\xymatrix@C=2.519cm@R=0.719cm{
&&&&&&\\
&&&B\ar[u]\ar[d]_{a, b}\ar@/^1.19pc/[rrd]^{c}&&&\\
\ar[r]&A\ar@/^1.19pc/[rru]^a\ar@/_1.19pc/[rrd]_b\ar[r]^c&D\ar@(ru, rd)[]^{a, b, c}&E\ar@(lu, ld)[]_{a, b, c}&G\ar[rd]\ar@(l, ld)[]^c\ar[l]_{a, b}&F\ar@/_1.19pc/[ll]_{a, b}\ar[l]_c\ar[r]&\\
&&&C\ar[d]\ar[u]^{a, b}\ar@/_1.19pc/[rru]_{c}&&&\\
&&&&&&
}
\]
Exercice
Sur l'alphabet \( \Sigma=\{a, b\}\) déterminer des automates reconnaissant les REGEX suivantes.
- \( ab^*\)
- \( (ab)^*\)
- \( a+b^*\)
- \( (a+b)^*\)