Langages réguliers et hors-contexte
Cours M1 INaLCO, 2009-2010
Interrogation écrite du 05/11/09 : Corrigé
L'énoncé
- On considère l'alphabet X = {
0, x, 7,
9, h
},
et l'expression régulière suivante sur cet alphabet,
écrite en syntaxe
standard du logiciel automate :
E = (7|9)+|0(7+|x(7|9|h)+)
- Transcrire cette expression en notation mathématique
(avec "∪" pour la
réunion et "
.
" pour le produit).
En traduisant lettre à lettre
on obtient : ({7}∪{9})+∪({0}.({7}
+
∪{x}.({7}∪{9}∪{h})
+
))
Une traduction plus intelligente évite les singletons autant que
possible et donne :
{7,9}
+
∪({0}.({7}
+
∪{x}.{7,9,h}
+
))
- Les deux sous-ensembles
(7|9)+
et 0(7+|x(7|9|h)+)
sont-ils disjoints ?
Oui, car les mots du premier
commencent par 7
ou
par 9
, tandis que les mots
du second commencent par 0
.
- Les mots suivants appartiennent-ils au langage de
l'expression, et
pourquoi ?
779
, 0779
, 779h
, 0779h
,
0x779h
, h779
, 0h779
,
0xh779
- Oui :
779
ne contient que des
7
et des 9
,
il appartient donc à (7|9)+
.
- Non :
0779
commence
par 0
, pour être dans le
langage il devrait donc se trouver dans 0(7+|x(7|9|h)+)
,
mais alors la présence d'un 9
exigerait celle d'un x
après
le 0
, ce qui n'est pas
vérifié.
- Non :
779h
n'est
pas dans (7|9)+
(à
cause du h
final),
ni dans 0(7+|x(7|9|h)+)
puisqu'il
ne commence pas par 0
.
- Non :
0779h
a
le même défaut que 0779
.
- Oui :
0x779h
est un exemplaire typique du format 0x(7|9|h)+)
inclus dans 0(7+|x(7|9|h)+)
.
- Non : même argument
contre
h779
que
contre 779h
.
- Non : même argument
contre
0h779
que
contre 0779h
.
- Oui :
0xh779
est du même format que 0x779h
.
- On considère un alphabet à quatre lettres X
= {
a,
b, d, s
}, et les trois expressions régulières
- E =
ab+s
∪ ad
∪ abb+d
- F =
(s
∪ d)
(a
∪ bb+a
)
- G = E
∪ F
- Les mots suivants appartiennent-ils à l'un des trois
langages décrits par nos trois expressions (et pourquoi) ?
abbs
, abbd
, ba
, abbsba
,
abbdba
abbs
∈ ab+s
⊆ E, donc abbs
∈ E
abbd
∈ abb+d
⊆ E,
donc abbd
∈ E
ba
n'apparttient à aucun des
langages en jeu :
en effet ce mot commence par b
, alors que les
mots de E commencent par a
et ceux de F par s
ou
par d
.
abbsba
et abbdba
non
plus, car les seuls mots qui se terminent par a
appartiennent
à F
et doivent donc commencer par s
ou
par d
.
- Les trois langages décrits par nos trois expressions
sont-ils deux à deux disjoints (et pourquoi) ?
Pour alléger le discours, nous identifions
les e.r. et les langages
qu'elles décrivent.
- E et F sont
disjoints, puisque les mots de E commencent par
a
et ceux de F par s
ou par d
.
- Comme G contient E
et F, ses intersections avec E
et F sont :
Ces intersections ne sont pas vides...
- On considère un alphabet à cinq lettres X
= {
f, g, d, x, v
},
et l'expression régulière sur X
E = fgd ∪
fg(xv)*xd
- Les mots suivants appartiennent-ils au langage L
décrit par notre expression (et pourquoi) ?
fd
, fgd
, fgxd
,
fgxvxvd
, fgxvxvxd
- le mot le plus
court du
langage est
fgd
,
donc fd
n'appartient pas à L.
fgd
figure
explicitement dans le premier terme de la réunion, il appartient donc
au langage.
fgxd
est
obtenu dans le second terme fg(xv)*xd
en prenant le mot vide (puissance 0) dans l'étoile (xv)*
;
c'est le second mot le plus court de L (il est
précédé par fgd
).
fgxvxvd
est
presque bon... mais il lui manque une dernière occurrence de x
juste
avant le d
final.
fgxvxvxd
est
un mot "typique" de L, obtenu en prenant la
puissance 2 dans l'étoile (xv)*
:
fgxvxvxd
= (fg)[xvxv](xd
)
= (fg)[xv]2(xd
)
- Interprétation :
on lit les mots de L
comme des expressions mathématiques où une fonction est appliquée à ses
arguments.
- la lettre
f
est le nom de la fonction
- la lettre
x
désigne de
manière générique un argument quelconque
- la lettre
g
représente la parenthèse ouvrante
- la lettre
d
représente la parenthèse fermante
- la lettre
v
représente la
virgule
Exemples : les trois mots de la question 1 se lisent respectivement
"f)"
,
"f()"
,
"f(x)"
, "f(x,x,)"
et "f(x,x,x)
".
Donner une description générale en français des mots du langage L
ainsi interprétés.
Il s'agit des mots de la forme "f
suivi d'une seule paire de parenthèses ouvrante-fermante, à l'intérieur
de laquelle on trouve
soit rien du tout (cas d'une fonction sans argument), soit une suite
non-vide de x
séparés par des
virgules, sans virgule après le dernier x
".