-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexemples.mlr
69 lines (55 loc) · 2.16 KB
/
exemples.mlr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
{-
On peut mettre des commentaires dans les fichiers : il suffit de les entourer
des symboles "{-" et "-}".
Note : ce n'est pas comme en C, les commentaires peuvent être imbriqués.
Par exemple le symbole "fin de commentaire" de la ligne 3 ne fermait pas le
commentaire principal, mais seulement le symbole "début de commentaire" de la
ligne 3...
-}
{- exemples
-----------
Pour rentrer une expression régulière, on utilise une syntaxe « à la Kleene »,
avec des lettres minuscules comme symboles.
-}
(a+b) (a* + ab*)*
{- chaque expression régulière est affichée, après quelques simplifications
évidentes. Par exemple, l'expression régulière suivante donnera en fait
(aa* + b*)*
-}
(aa* + b* + a 1 a*)*
{- on peut tester si un mot appartient au langage d'une expression en
utilisant le mot clé "IN"
Par exemple, la ligne suivante affichera "true"
-}
"abcaa" IN (ab* + ca*)*
{- on peut tester si deux expressions ont le même langage en utilisant "==".
Par exemple, la ligne suivant doit afficher "true" -}
(1 + ab + a(ba)*bab) == ab*
{- si on utilise la commande ":set verbose 1", le programme nous affiche un
contre exemple lorsqu'on demande de vérifier une égalité fausse.
Par exemple, la première ligne affiche simplement "false", mais après le
":set verbose", elle nous donne un contre-exemple : le mot vide.
-}
(1 + ab + a(ba)*ba) == ab*a
:set verbose 1
(1 + ab + a(ba)*ba) == ab*a
{- on peut calculer une dérivée avec le symbole "/". Le résultat est simplifié
en utilisant uniquement les règles évidentes. Par exemple, les trois lignes
suivantes affichent
b*(aab* + bb + bab*)* + a*(aab* + bb + bab*)*
(b + ab*)(aab* + bb + bab*)*
0
-}
a*(aab* + bab* + bb)* / "a"
a*(aab* + bab* + bb)* / "ab"
a*(aab* + bab* + bb)* / "abc"
{- on peut demander toutes les dérivées avec ":derivatives" -}
:derivatives a*(aab* + bab* + bb)* / "a"
{- Note : on peut définir des expressions régulières R1, R2, R3, etc. avec
le symbole ":=". Cela permet de réutiliser des expressions pour former des
expressions complexes... -}
R1 := (aa + ab)*
R2 := (R1 + aa R1 bb)*
R3 := R2 / "aabb"
{- On peut faire plein d'autres trucs. Utilisez la commande ":help" pour vous
renseigner... -}